Я видел комментарий, в котором говорилось, что инициализация массива символов с помощью "\001"
поставит нуль в качестве первого символа. Я видел, где \0
устанавливает нулевое значение.
Неотредактированный комментарий:
ввод символов [РАЗМЕР] = ""; достаточно инициализации. while ( '\001' == input[0]) не делает то, что вы думаете, если вы инициализировали input[SIZE] = "\001"; (который создает пустую строку с нулевым символом в качестве 1-го символа.)
Эта программа
#include <stdio.h>
#define SIZE 8
int main ( void) {
char input[SIZE] = "\001";
if ( '\001' == input[0]) {//also tried 1 == input[0]
printf ( "octal 1\n\n");
}
else {
printf ( "empty string\n");
}
return 0;
}
работающий в Linux, скомпилированный с помощью gcc
, выводит:
octal 1
таким образом, первый символ — 1
, а не '\0'
.
Это стандартное поведение или что-то в Linux и gcc
? Почему он не устанавливает ноль?
\0
сам по себе создает NUL, но стандартное поведение для\001
заключается в том, чтобы создавать символ с числовым значением 1, как вы заметили. (Общее правило состоит в том, что обратная косая черта, за которой следует одна, две или три восьмеричных цифры, представляет собой одиночный экран.) Пожалуйста, процитируйте нам полный и неотредактированный фактический комментарий, который вы видели, по крайней мере, с пятью строками контекст выше и ниже, и, если возможно, дайте ссылку на всю программу, которую вы цитируете. - person zwol   schedule 30.07.2018'\001'
и"\001"
- person Saeid Yazdani   schedule 30.07.2018