gpt4 book ai didi

c - 为什么字符串的 scanf/printf 打印不同的东西

转载 作者:行者123 更新时间:2023-11-30 21:18:01 25 4
gpt4 key购买 nike

我知道这很简单。在提问之前我尝试在 stackoverflow 中寻找答案,但找不到答案。

char str[5], new_str[5];
int i, len;

printf("Enter a string: ");
scanf("%s", str);
len = strlen(str);

for (i = 0; i < len; i++){
new_str[i] = str[i];
}

printf("Result: %s", new_str);

我得到:

Enter a string: 1234
Result: 1234╠╠╠╠╠╠╠╠╠╠╠1234

我知道如何正确执行此操作(使用 malloc),但我试图理解为什么会发生这种输出。

最佳答案

变量new_str没有'\0'符号在它的末尾,因为它是一个数组而不是一个“字符串”。

调用printf("%s", new_str);打印整个字符串直到 '\0'符号,结束字符串。

显示输入后,str相当于 {"1","2","3","4","5","\0"}new_str相当于 {"1","2","3","4","5"}因为您只复制了 5 个符号。正因为如此,printf打印 12345 ( new_str ) 之后的其他符号,这些符号位于内存的下一个单元中,直到找到空字节为止。这是未定义的行为。

关于c - 为什么字符串的 scanf/printf 打印不同的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016027/

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