gpt4 book ai didi

c - 在小数组中连接两个字符串时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:51:12 27 4
gpt4 key购买 nike

我昨天开始学习 C,所以这可能是一个微不足道的问题,但我还是不明白。

假设我有以下代码:

#include <stdio.h>
#include <string.h>

int main()
{
char text[8];
strcpy(text, "Lorem ");
puts(text);
strcat(text, "ipsum!");
puts(text);
return 0;
}

这将在连接字符串时(或之后)导致段错误。但是,如果我将 text 的大小从 8 更改为 9,它不会。

如果我错了,请纠正我,但这是我认为正确的:

“Lorem”- 尺寸 6(或 7 带\0)
“假话!” - 6 号(或 7 号带\0)
“Lorem ipsum!” - 尺寸 12(或带\0 的 13)

那么,8/9 从何而来?这是strcat的实现导致的吗?或者是否有类似最小数组长度的东西?还是我犯了一个愚蠢的初学者错误?

提前致谢。

最佳答案

它没有崩溃纯粹是运气,至少在 Linux 上我得到了 *** stack smashing detected ***

您正试图将一个字符串附加到另一个字符串,即使后者的存储空间不足。这是未定义行为的一个例子(如评论中所指出的)。

C 是一种始终信任程序员的语言,因此在编译时您甚至可能不会收到警告。

始终确保您的缓冲区中有足够的存储空间,C 中很少有设施可以保证安全行为,因此不要假设诸如最小数组长度之类的事情。

关于c - 在小数组中连接两个字符串时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18352270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com