【发布时间】:2016-08-13 21:39:34
【问题描述】:
我有一个问题想更好地理解数组和空字节在 C 中的工作原理。
假设我有一个包含 13 个单元格的 int 数组。 假设我希望单元格编号:1、2、3 和 10 具有值。其他默认的,自动获取 nullchar \0 作为值?
我对 \0 的理解是 nullbyte 总是在数组的末尾,它的作用是告诉程序数组在哪里结束。不过好像错了
我写了一个简单的程序来验证它,看起来是这样的:
int nums[13] = {1,2,3};
nums[10] = 69;
int i;
for(i=0;i<13;i++) {
if(nums[i]=='\0') {
printf("null char found! in position: %d\n",i);
}
else {
printf("element: %d found in position: %d of int array\n",nums[i],i);
}
}
return 0;
这是输出:
元素:1 在 int 数组的位置:0 中找到
元素:2 在 int 数组的位置:1 中找到
元素:3 在 int 数组的位置:2 中找到
找到空字符!在位:3
找到空字符!在位:4
找到空字符!在位:5
找到空字符!在位:6
找到空字符!在位:7
找到空字符!在位:8
找到空字符!在位:9
元素:69 在位置:int 数组的 10 中找到
找到空字符!在位:11
找到空字符!在位:12
| 1 | | 2 | | 3 | | \0 | | \0 | | \0 | | \0 | | \0 | | \0 | | 69 | | \0 | | \0 | | \0 |
那么为什么默认单元格设置为 \0 值?例如,而不是留空?
null char 不应该只在整个数组的末尾出现一次吗? 谢谢
【问题讨论】:
-
静态分配的内存用 0 填充标量或 NULL (\0) 填充指针。如果将 \0 转换为标量,它将被转换为 0。没有“空”之类的东西。无论如何,您都不应该将 NULL (\0) 与 int 进行比较,请使用文字 0。
-
“我对 \0 的理解是 nullbyte 总是在数组的末尾..”是完全错误的。您混淆了常规数组和 C 字符串。
-
@Tibrogargan
\0(NUL 字符)与NULL指针不同。\0是一个所有位都设置为 0 的字节,它总是比较等于int0。 -
@Kninnug 是的,感谢您的更正。我的意思是 NUL。 NULL 的变体太多。 null、nul、nil、NUL 等