LINUX.ORG.RU

strlen(NULL);


0

0
есть ли реализация библиотеки стандартных функций, где strlen(NULL) возвращает 0 а не segmentation fault ?
anonymous
if(p) return strlen(p); else return NULL;

с тебя $100 :)

SadStork
()
#define strlen_null(p) (p) ? strlen(p) : NULL

$50 мне :))

ananas ★★★★★
()
2 ananas.
Облом тебе, а не $50.

char c[] = "";
int i = strlen_null(c) + 2;

будет после подстановки выглядеть так:

char c[] = "";
int i = (c) ? strlen(c) : NULL + 2;

Во-первых, при компиляции gcc будет ругаться на арифметику с void* (NULL+2 == ((void*)0)+2).
Во-вторых, gcc будет ругаться на то, что strlen(c) имеет тип int, а NULL+2 -- тип void* (два последних операнда для `?:' должны быть одного типа).
Во-третьих, в результате i будет равно не 2 (как ожидалось), а 0.

Так что делать так:

#define mystrlen(p) ((p) ? strlen(p) : 0)
nobody ★★
()
согласен, ступил, бо ориентировался на первый ответ :(

$50 SadStork-а переходят nobody :)))

з.ы. жадный я сегодня :))

ananas ★★★★★
()
как только anonymous пришлет - сразу делюсь :)
SadStork
()
Варианты с макросами, собственно, все не покатят, ибо mystrlen(p++) даст совсем не тот результат, что ожидается. $200.
aa5779
()
Тады только inline. Но в случае Си он поддерживается не всеми компиляторами.
nobody ★★
()
Тогда, если позволяет религия, можно воспользоваться расширением gcc

#define mystrlen(p) strlen((p)?:"")

Хотя как себя поведёт с p++ незнаю надо порверять, но пологике всё должно быть ok
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.