Какая разница между lstrlen и sizeof?

Тема в разделе "WASM.BEGINNERS", создана пользователем vg, 8 июл 2008.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Не понимаю. Какая разница между следующими двумя примерами? Первый работает(получает строку), второй - нет.

    1)
    Код (Text):
    1. invoke GetPrivateProfileString,addr sec,addr key,0,addr str,[b]sizeof str[/b],addr path
    2)
    Код (Text):
    1. invoke lstrlen,addr str
    2. mov len,eax
    3. invoke GetPrivateProfileString,addr sec,addr key,0,addr str,[b]len[/b],addr path
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    lstrlen идет до первого нуля.
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    sizeof - макрос, возвращающий размер переменной в байтах. Для строки str db XXX dup это будет XXX байт. Размер вычисляется на этапе компиляции и в точку вызова подставляется число
    lstrlen - рантайм-функция, подсчитывающая число символов в строке до первого нулевого байта.
    В данном случае вариант с sizeof более правильный, т.к. в функцию нужно передавать макимальный размер буфера под строку, а не ее текущую длину, которая видимо равна 0, т.к. str инициализирована нулями