gpt4 book ai didi

c - 为什么 c 中的 dest 数组需要这么多空间用于 strcat

转载 作者:行者123 更新时间:2023-11-30 20:57:53 25 4
gpt4 key购买 nike

我的代码如下:

int main(){
char str[10];
char test[2]={'a','b'};
strcat(str,test);
printf("%s\n",str);
return 0;
}

如果我设置 str[3] 而不是 str[10] 那么程序就会崩溃。为什么 str[] 需要这么多空格,尽管我只有 2 个字母要复制。

最佳答案

在您的程序中,strcat() 首先查看 str[10] 并向前扫描查找字符串结尾字符(NUL/零)。当它发现时,它会从 test[] 开始复制字符串,直到到达该字符串末尾的 NUL。

你想要的是这样的:

str[10] = [NUL,?,?,?,?,?,?,?,?,?]
test[3] = [a,b,NUL]

但你实际拥有的是这样的:

str[10] = [?,?,?,?,?,?,?,?,?,?,?,?,?,?,...]
test[2] = [a,b,?,?,?,?,...]

Strcat 将继续复制,直到找到零,这可能超出数组末尾数千个字节。您要么会遇到段错误,要么会覆盖随机数据。 Strcat 不知道有关数组大小的任何信息。

字符串“ab”需要一个长度为[3]的数组,因为它还包含一个NUL字符,因此您的测试声明太小。

在 C 中,带引号的字符串会自动在末尾包含 NUL,但数组不会。你想要的是这样的:

char str[10] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'};
char test[3] = {'a','b','\0'};

或者,你可以更简单地写成这样:

char str[10] = "";
char test[3] = "ab";

关于c - 为什么 c 中的 dest 数组需要这么多空间用于 strcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55957779/

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