gpt4 book ai didi

c - C语言中的字符串连接?

转载 作者:行者123 更新时间:2023-11-30 20:03:22 24 4
gpt4 key购买 nike

我试图理解 C 语言中字符串的行为,这让我很困扰,因为我的以下两个代码片段会产生不同的输出:(对于这个问题,我们假设用户输入 12)

int main(void)  
{
char L_Red[2];
char temp[] = "I";
printf("Enter pin connected to red: ");
scanf("%s", L_Red);
strcat(temp,L_Red);
printf("%s \n", temp);
return 0;
}

这会产生:12 作为输出(而不是 I12)为什么?

int main(void)  
{
char L_Red[2];
printf("Enter pin connected to red: ");
scanf("%s", L_Red);
char temp[] = "I";
strcat(temp,L_Red);
printf("%s \n", temp);
return 0;
}

这会产生:I12I(而不是 I12)为什么?

我已经阅读了有关 C 中字符串的内容,根据我的理解,我既没有为 temp 分配任何固定大小并稍后更改它以获得这些模糊的输出,也没有以不应该的方式使用字符串。这里还有其他概念在起作用吗?

最佳答案

数组 temp 是一个由两个个字符组成的数组('I' 和字符串终止符 '\0')。就是这样。尝试向该数组追加更多字符将越界并导致 undefined behavior .

您需要确保目标数组 temp 有足够的空间来容纳其原始内容加上您要附加的字符串(加上终止符)。

<小时/>

此外,如果您想为“字符串”L_Red 输入多个字符,您还需要增加其大小。

我还建议您在格式说明符中使用限制,这样您就不能写出越界的内容:

char L_Red[3];  // Space for two characters, plus terminator
scanf("%2s", L_Red); // Read at most two characters of input

关于c - C语言中的字符串连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52564877/

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