【发布时间】:2018-07-30 17:57:48
【问题描述】:
我看到一条评论说用"\001" 初始化一个字符数组会将nul 作为第一个字符。我已经看到\0 在哪里设置了一个 nul。
未编辑的评论:
字符输入[SIZE] = "";是足够的初始化。如果你已经初始化了 input[SIZE] = "\001"; while ( '\001' == input[0]) 不会做你认为它正在做的事情; (这会创建一个空字符串,其中 nul 字符作为第一个字符。)
这个程序
#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 的行为?为什么不设置nul?
【问题讨论】:
-
我会说引用的评论是错误的。
-
\0本身 产生一个 NUL,但标准行为是\001产生一个数值为 1 的字符,正如您所观察到的。 (一般规则是反斜杠后跟一个、两个或三个八进制数字是单个转义。)请引用我们您看到的完整且未经编辑的实际评论,至少有五行上面和下面的上下文,如果可能,请提供指向您引用的整个程序的链接。 -
'\001'和"\001"有区别 -
@SaeidYazdani 但这里并不真正相关
-
是的,@SaeidYazdani,OP 给出了理解这一点的所有迹象。