Как проверить, что строка инициализируется в c? - PullRequest
2 голосов
/ 18 мая 2010

Быстрый и легкий C вопрос: char* foo

Как я могу проверить, если foo еще не присвоено значение?

Спасибо.

Ответы [ 3 ]

26 голосов
/ 18 мая 2010

Вы не можете.

Вместо этого инициализируйте его с NULL и проверьте, является ли оно NULL:

char *foo = NULL;
...
if(!foo) { /* shorter way of saying if(foo == NULL) */
7 голосов
/ 18 мая 2010

Вы не можете тестировать во время выполнения независимо от платформы. Выполнение чего-либо с неинициализированным значением, кроме присвоения ему, является неопределенным поведением. Посмотрите на источник и проанализируйте поток кода.

Возможно, ваш компилятор инициализирует стековую память определенным значением, и вы можете проверить это значение. Он не переносим даже на один и тот же компилятор с разными флагами (потому что стандарт не требует этого, и это может произойти только в режиме отладки), и он ненадежен, потому что вы могли назначить «магическое» значение.

В этом случае вы обычно инициализируете указатель на NULL (эквивалентно 0), а затем проверяете, является ли он NULL. Это не говорит вам, назначили ли вы NULL ему или нет за прошедшее время, но говорит вам, присвоили ли вы «полезное» значение.

0 голосов
/ 18 мая 2010

Ваша переменная определена / объявлена, но не инициализирована. Вы можете проверить, имеет ли ваша переменная значение, сначала инициализируя ее при объявлении. Затем вы можете проверить, имеет ли оно это начальное значение.

char *foo = NULL;


//...

if(foo)
{
}
...