2016-01-27 3 views
-3

Как я могу проверить, что массив имеет нулевое завершение?Почему я не вижу, что последний символ в массиве является нулевым терминатором?

char input[80]; 

fgets(input, sizeof(input), stdin); 

for (i = 0; input[i]; i++) 
{ 
    if (input[i] == '\0') { 
     printf("null!!!"); // never works 
    } 
} 

Например, приведенный ниже код не печатает null.

ответ

7

В вашем состоянии for петли, вы уже проверки для не-0 значения input[i], так что внутри if является мертвым состояния.

Чтобы проверить, выполните бесконечный цикл, проверьте if, а затем распечатайте и отправьте break. Что-то вроде

for (i = 0; ; i++) 
{ 
    if (input[i] == '\0') { 
     printf("null!!!\n"); // now works 
     break; 
    } 
} 
2

Как только input[i] равен 0, то цикл завершается, так что оператор печати никогда не выполняется.

+0

обновленный вопрос – avasin

+0

@avasin пожалуйста ** не делаем **. Это заставляет всех предыдущих ответчиков казаться глупыми. Я откинулся назад. –

+0

@SouravGhosh Я только что добавил дополнительную информацию>< – avasin

1

Вот еще один рабочий код, если вы заинтересованы:

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    char input[] = "I am a string !!"; 
    int i = 0; 
    while(1) { 
     if (input[i] == '\0') { 
      printf("null!!!"); 
      break; 
     } 
     i++; 
    } 
} 
0

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

char input[80]; 

fgets(input, sizeof(input), stdin); 

for (i = 0; i<80; i++) 
{ 
    if (input[i] == '\0') { 
     printf("null!!!"); 
    } 
} 

Вы также можете изменить if (input[i] == '\0') только if (! input[i]) так '\0' (нуль-терминатор) имеет значение ASCII 0.

+1

С уважением, вы прочитали man-страницу 'fgets()', прежде чем назначать другие ответы как ошибочные? Разве это не косвенно налагает границы? :) –

+0

@SouravGhosh, да, почему? Хорошо, теперь я вижу, что эти ответы имеют «разрыв» после печати. – ForceBru

+0

'if (! Input [i])' будет выполняться также для значения '0', не так ли? (действительный символ) – avasin