PDA

Просмотр полной версии : [Вопрос] strmid



Димарио
10.07.2019, 19:20
Почему если не указывать последний аргумент strmid (хотя он ведь необязателен), то введенный текст просто не записывается?

strmid(PlayerInfo[playerid][pPass], inputtext, 0, strlen(inputtext));
Так в переменную ничего не записывается, но если же в конец добавить размер, то все прекрасно работает

strmid(PlayerInfo[playerid][pPass], inputtext, 0, strlen(inputtext), 24);
Почему так происходит?

И еще вопрос, почему нельзя использовать следующую размерность:

strmid(PlayerInfo[playerid][pPass], inputtext, 0, strlen(inputtext), sizeof(PlayerInfo[playerid][pPass]));
Выдаёт ошибку, хотя размер массива в enum указан

Daniel_Cortez
12.07.2019, 00:28
Почему если не указывать последний аргумент strmid (хотя он ведь необязателен), то введенный текст просто не записывается?

strmid(PlayerInfo[playerid][pPass], inputtext, 0, strlen(inputtext));
Так в переменную ничего не записывается, но если же в конец добавить размер, то все прекрасно работает

strmid(PlayerInfo[playerid][pPass], inputtext, 0, strlen(inputtext), 24);
Почему так происходит?
Понятия не имею. Пробовал воспроизвести на пустом скрипте, без последнего аргумента всё записывается.

#include <a_samp>

enum ePlayerInfo
{
pLevel,
pPassword[24]
};
new player_info[2][ePlayerInfo];

main()
{
new inputtext[] = "1234567890";
new playerid = 1;
strmid(player_info[playerid][pPassword], inputtext, 0, strlen(inputtext));
printf("player_info[playerid][pPassword]: %s", player_info[playerid][pPassword]);
}


player_info[playerid][pPassword]: 1234567890


И еще вопрос, почему нельзя использовать следующую размерность:

strmid(PlayerInfo[playerid][pPass], inputtext, 0, strlen(inputtext), sizeof(PlayerInfo[playerid][pPass]));
Выдаёт ошибку, хотя размер массива в enum указан
Потому что в sizeof нельзя ничего указывать внутри измерений (т.е. внутри квадратных скобок). Можно использовать вот так:

new arr[2][3][24];
// ...
printf("%d", sizeof(arr)); // 2
printf("%d", sizeof(arr[])); // 3
printf("%d", sizeof(arr[][])); // 24

execution
12.07.2019, 11:50
new arr[2][3][24];
// ...
printf("%d", sizeof(arr[])); // 24


Забыл указать ещё квадратные скобки:


printf("%d", sizeof(arr[][])); // 24