提问人:Christopher Chilengwe 提问时间:7/27/2023 最后编辑:Ted LyngmoChristopher Chilengwe 更新时间:7/27/2023 访问量:97
C - 指针、数组和字符串 [已关闭]
C - pointers, arrays and strings [closed]
问:
- 为什么在声明/分配字符串时为额外的字符保留足够的空间很重要?
- 当尝试取消引用指向 NULL 的指针时会发生什么情况?
- 下面的代码有什么问题?
int n = 5;
int 数组[n];
int i = 3;
数组[n] = i;
答:
2赞
Ted Lyngmo
7/27/2023
#1
- 因为字符串以 null 结尾,这意味着字符串中有一个最后一个字符来告诉函数读取字符串的字符串结束位置。
\0
- 发生的情况是,您的程序将具有未定义的行为,并且几乎可以执行任何操作。它很可能会崩溃。
- 您正在尝试在文件范围内声明 VLA(可变长度数组)。它需要位于函数中。此外,越界访问数组,因为数组只有元素。
array[n] = i;
n
评论
1赞
ad absurdum
7/27/2023
“因为字符串通常以 null 结尾,...”根据定义,字符串不是以 null 结尾的吗?
1赞
Ted Lyngmo
7/27/2023
@adabsurdum 当人们谈论字符串时,它们通常意味着以 null 结尾的字符串,但如果您愿意,您可以拥有长度在前、数据在长度后等的字符串。不过,您必须为他们创建自己的打印功能等。
0赞
ad absurdum
7/27/2023
我明白你的意思;当然,您可以按照您的建议实现自己的字符串表示形式。我在想“字符串是以第一个 null 字符结尾并包含第一个 null 字符的连续字符序列”。但这来自标准库,我想不需要独立的实现来遵循这一点。
1赞
Ted Lyngmo
7/27/2023
@adabsurdum啊,是的,好点子。我不认为这在标准中定义,但即使在 C23 草案中也是如此。我删除了“通常”。
上一个:C++ 更改字符串中的字符
下一个:如何从地址和大小打印字符串
评论