C - 指针、数组和字符串 [已关闭]

C - pointers, arrays and strings [closed]

提问人:Christopher Chilengwe 提问时间:7/27/2023 最后编辑:Ted LyngmoChristopher Chilengwe 更新时间:7/27/2023 访问量:97

问:


想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。

4个月前关闭。

  1. 为什么在声明/分配字符串时为额外的字符保留足够的空间很重要?
  2. 当尝试取消引用指向 NULL 的指针时会发生什么情况?
  3. 下面的代码有什么问题?

int n = 5;

int 数组[n];

int i = 3;

数组[n] = i;

数组 C 字符串 指针

评论

3赞 ad absurdum 7/27/2023
这些问题是来自作业还是测试?
1赞 pmacfarlane 7/27/2023
你对这些问题进行了哪些研究?您是否尝试过在 Stack Overflow 上搜索或使用搜索引擎?你发现了什么?
0赞 john elemans 7/27/2023
您应该运行代码来自己解决这个问题。
0赞 tadman 7/27/2023
“当尝试取消引用指向 NULL 的指针时会发生什么?”未定义的行为,通常转化为坏事
3赞 Ted Lyngmo 7/27/2023
请不要更改您的问题,以免您得到的答案变得无法使用。如果您有更多问题,只需发布新的单独问题。

答:

2赞 Ted Lyngmo 7/27/2023 #1
  1. 因为字符串以 null 结尾,这意味着字符串中有一个最后一个字符来告诉函数读取字符串的字符串结束位置。\0
  2. 发生的情况是,您的程序将具有未定义的行为,并且几乎可以执行任何操作。它很可能会崩溃。
  3. 您正在尝试在文件范围内声明 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 草案中也是如此。我删除了“通常”。