Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 11
  1. #1
    Аватар для franked
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.02.2015
    Адрес
    Ташкент епта
    Сообщений
    10
    Репутация:
    0 ±

    Узнать длину значения константы (если строка)

    Ребят,как я понял нельзя узнать длину строки константы? Сколько не пробовал,получал одну и ту же ошибку. Если можно,поделитесь как

  2. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    PHP код:
    const string[] = "abcd";
    printf("Длина строки: %d"sizeof(string));
    printf("Длина строки: %d"strlen(string)); 

  3. Пользователь сказал cпасибо:
    franked (18.02.2016)
  4. #3
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Не очень, корректно, использовать sizeof в данном случии.
    Цитата Сообщение от ziggi Посмотреть сообщение
    PHP код:
    printf("Длина строки: %d"sizeof(string)); 
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  5. Пользователь сказал cпасибо:
    franked (18.02.2016)
  6. #4
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Не очень, корректно, использовать sizeof в данном случии.
    Почему? Если строка объявлена так, как объявил я, то вполне корректно.

  7. Пользователь сказал cпасибо:
    franked (18.02.2016)
  8. #5
    Аватар для franked
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.02.2015
    Адрес
    Ташкент епта
    Сообщений
    10
    Репутация:
    0 ±
    Ой..,забыл упомянуть,константы типа #define,вот тут уж точно нельзя,да?

    P.S благодарен,что не прошли эту тему стороной!

  9. #6
    Аватар для MacMailler
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.02.2014
    Сообщений
    38
    Репутация:
    15 ±
    Можно.
    PHP код:
        #define TEST1 Пример строки №1.
        #define TEST2 "Пример строки №2."
        
    printf("TEST1:%i"strlen(""#TEST1""));
        
    printf("TEST2:%i"strlen(TEST2)); 

  10. Пользователь сказал cпасибо:
    franked (18.02.2016)
  11. #7
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Почему? Если строка объявлена так, как объявил я, то вполне корректно.
    Тогда в первом варианте должно быть не "длина строки", а "размер строки" или "размер массива", т.к. это не одно и то же.


    Цитата Сообщение от franked Посмотреть сообщение
    Ребят,как я понял нельзя узнать длину строки константы? Сколько не пробовал,получал одну и ту же ошибку. Если можно,поделитесь как
    PHP код:
    static const str_0[] = "Sample text";
    printf("text: %s, length: %d"str_0sizeof(str_0)-1); 
    Как-то так, берём размер строки и вычитаем 1 ячейку, отведённую под символ конца строки (нуль-символ).
    Но такой подход работает не во всех ситуациях. Например, в массив из 20 ячеек можно записать текст из 10 символов и будут заняты только 11 ячеек из 20 - тогда придётся использовать strlen. Здесь sizeof(str_0)-1 работает только потому, что компилятор сам рассчитывает минимальный размер массива, достаточный, чтобы вместить в него строку.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  12. 2 пользователя(ей) сказали cпасибо:
    franked (18.02.2016) VVWVV (18.02.2016)
  13. #8
    Аватар для franked
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.02.2015
    Адрес
    Ташкент епта
    Сообщений
    10
    Репутация:
    0 ±
    Отлично! Всем большое спасибо за ответы! Вот только еще такой вопрос...

    У меня имеется функция,куда я могу передать строку. Но эту строку я так же могу и не передавать,то есть строка - не обязательный параметр.
    PHP код:
    stock MyFunc(playerididtext[] = "")//И по умолчанию она равняется пустому символу как бы
    {
        
    //Так вот,я бы хотел рассчитать внутри этой функции размер текста.
        
    new testVar[10+sizeof(text)];//Вот примерно таким образом

    И вот тут как раз меня не спасает не один из выше приведенных вариантов...
     Вот какие ошибки выдает,когда я использую тот или иной вариант

     sizeof(text)-1

    PHP код:
    warning 224indeterminate array size in "sizeof" expression (symbol ""


     strlen(text)

    PHP код:
    error 008must be a constant expressionassumed zero
    error 009
    invalid array size (negativezero or out of bounds)
    error 036: empty statement
    fatal error 107
    too many error messages on one line 
    Вот кстати насчет ошибки
    PHP код:
    error 008must be a constant expressionassumed zero 
    Как я понял,здесь сказано,что переменная должна быть как константа что ли?,Окей я попробовал функцию назвать так:
    PHP код:
    stock MyFunc(playeridid, const text[] = ""
    И все-равно,ошибки идентичные (такие же,что и выше описаны для этого спойлера)



    Как я понял,это безвыходная ситуация? Получается так нельзя заполнить переменную никак? типа "динамическим" образом?

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от franked Посмотреть сообщение
    Отлично! Всем большое спасибо за ответы! Вот только еще такой вопрос...

    У меня имеется функция,куда я могу передать строку. Но эту строку я так же могу и не передавать,то есть строка - не обязательный параметр.
    PHP код:
    stock MyFunc(playerididtext[] = "")//И по умолчанию она равняется пустому символу как бы
    {
        
    //Так вот,я бы хотел рассчитать внутри этой функции размер текста.
        
    new testVar[10+sizeof(text)];//Вот примерно таким образом

    И вот тут как раз меня не спасает не один из выше приведенных вариантов...
     Вот какие ошибки выдает,когда я использую тот или иной вариант

     sizeof(text)-1

    PHP код:
    warning 224indeterminate array size in "sizeof" expression (symbol ""


     strlen(text)

    PHP код:
    error 008must be a constant expressionassumed zero
    error 009
    invalid array size (negativezero or out of bounds)
    error 036: empty statement
    fatal error 107
    too many error messages on one line 
    Вот кстати насчет ошибки
    PHP код:
    error 008must be a constant expressionassumed zero 
    Как я понял,здесь сказано,что переменная должна быть как константа что ли?,Окей я попробовал функцию назвать так:
    PHP код:
    stock MyFunc(playeridid, const text[] = ""
    И все-равно,ошибки идентичные (такие же,что и выше описаны для этого спойлера)



    Как я понял,это безвыходная ситуация? Получается так нельзя заполнить переменную никак? типа "динамическим" образом?
    Добавьте опциональный параметр size, в котором значением по умолчанию будет sizeof(string).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  15. Пользователь сказал cпасибо:
    franked (18.02.2016)
  16. #10
    Аватар для franked
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.02.2015
    Адрес
    Ташкент епта
    Сообщений
    10
    Репутация:
    0 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Добавьте опциональный параметр size, в котором значением по умолчанию будет sizeof(string).
    Точно! Как же я не догадался! То есть получается выглядеть это все будет примерно так,как я понял? :
     Как это по идее должно выглядеть

    PHP код:
    static Stringi[] = "Я тот самый текст,размер которого будет учитываться";
    MyFunc(playerididStringi);//3ий параметр не обязателен,но я хочу его включить,4ый тоже не обязательный,хочу чтобы он сам посчитал
    //Сама функция
    stock MyFunc(playerididtext[] = ""size sizeof(text))
    {
        new 
    testVar[10+size];//Вот примерно таким образом?!

    Я правильно понял? Если да,то все-еще та ошибка,только уже как с методом strlen:
    PHP код:
    error 008must be a constant expressionassumed zero
    error 009
    invalid array size (negativezero or out of bounds)
    error 036: empty statement
    fatal error 107
    too many error messages on one line 
    Если нет, то будьте добры пожалуйста, показать,как в итоге примерно должна эта функция выглядеть?!
    Последний раз редактировалось franked; 18.02.2016 в 15:39.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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