Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3

Тема: strmid

  1. #1
    Аватар для Димарио
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.02.2017
    Сообщений
    13
    Репутация:
    0 ±

    strmid

    Почему если не указывать последний аргумент 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 указан

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,977
    Репутация:
    2402 ±
    Цитата Сообщение от Димарио Посмотреть сообщение
    Почему если не указывать последний аргумент strmid (хотя он ведь необязателен), то введенный текст просто не записывается?
    Код:
    strmid(PlayerInfo[playerid][pPass], inputtext, 0, strlen(inputtext));
    Так в переменную ничего не записывается, но если же в конец добавить размер, то все прекрасно работает
    Код:
    strmid(PlayerInfo[playerid][pPass], inputtext, 0, strlen(inputtext), 24);
    Почему так происходит?
    Понятия не имею. Пробовал воспроизвести на пустом скрипте, без последнего аргумента всё записывается.
    1. #include <a_samp>
    2.  
    3. enum ePlayerInfo
    4. {
    5. pLevel,
    6. pPassword[24]
    7. };
    8. new player_info[2][ePlayerInfo];
    9.  
    10. main()
    11. {
    12. new inputtext[] = "1234567890";
    13. new playerid = 1;
    14. strmid(player_info[playerid][pPassword], inputtext, 0, strlen(inputtext));
    15. printf("player_info[playerid][pPassword]: %s", player_info[playerid][pPassword]);
    16. }

    Код:
    player_info[playerid][pPassword]: 1234567890
    Цитата Сообщение от Димарио Посмотреть сообщение
    И еще вопрос, почему нельзя использовать следующую размерность:
    Код:
    strmid(PlayerInfo[playerid][pPass], inputtext, 0, strlen(inputtext), sizeof(PlayerInfo[playerid][pPass]));
    Выдаёт ошибку, хотя размер массива в enum указан
    Потому что в sizeof нельзя ничего указывать внутри измерений (т.е. внутри квадратных скобок). Можно использовать вот так:
    1. new arr[2][3][24];
    2. // ...
    3. printf("%d", sizeof(arr)); // 2
    4. printf("%d", sizeof(arr[])); // 3
    5. printf("%d", sizeof(arr[][])); // 24
    Последний раз редактировалось Daniel_Cortez; 12.07.2019 в 13:56. Причина: забыл "[ ]" в последнем примере
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  3. #3
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    71
    Репутация:
    5 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    1. new arr[2][3][24];
    2. // ...
    3. printf("%d", sizeof(arr[])); // 24
    Забыл указать ещё квадратные скобки:

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

  4. Пользователь сказал cпасибо:
    Daniel_Cortez (12.07.2019)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •