【发布时间】:2019-01-30 16:56:32
【问题描述】:
我有以下 C 代码:
#include <stdio.h>
#include <strings.h>
int main(void){
char * str = "\012\0345";
char testArr[8] = {'\0','1','2','\0','3','4','5','\0'};
printf("%s\n",str);
printf("**%s**",testArr);
return 0;
}
查看实时代码here
我无法理解结果,我已经用谷歌搜索了,但我不确定我理解为什么字符串开头的空字符以及为什么中间的空字符只会导致字符串“5”显示。此外,当我将每个字符串字符分配给数组 testArr 然后尝试显示该字符数组时,尽管字符串和数组具有相同的字符,但结果是不同的。所以,我对令人困惑的结果感到震惊,尤其是它们的差异。对于字符串str,代码是否显示“5”是因为空字符覆盖了内存中的内容?
此外,对于我使用相同字符创建的数组,数组 testArr 中包含的数据不会显示任何内容。是否因为某种原因遇到第一个 null 时,其他所有内容都会被忽略?如果是这样,为什么包含相同字符的字符串 str 不会发生相同的行为?
【问题讨论】:
-
C 中的八进制数最多为 3 位。基本上你应该得到八进制字符表示。
-
@RaymondChen,四个,不是三个。
-
如果您将
str更改为"\0zz\0345",现在解析器会将第一个\0视为空值,因为z不是有效的八进制字符,因此您将得到相同的结果testArr的输出不足。
标签: c