gpt4 book ai didi

C代码表现异常,特殊字符来自哪里?

转载 作者:太空宇宙 更新时间:2023-11-04 05:11:37 25 4
gpt4 key购买 nike

我在更改数组 y[] 的范围时遇到异常的输出行为。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
char x[50];
int y[50];
fgets(x, 50, stdin);
for (int i; i<50; i++){
printf("%c", x[i]);
}
printf("DONE\n");
return 0;
}

为了测试程序,我一直在输入“10 10 10”,我希望程序打印回输入,然后是“DONE”语句。

然而,代码一直在输出带有“?DONE”、“;DONE”或其他特殊字符变体的“10 10 10”。

如果我注释掉 'int y[50]',它会完全跳过 for 循环。

来自 python/swift/java 背景,我不知道发生了什么,也不知道为什么 'y' 数组在我什至没有使用它时会导致错误。也许这只是因为我是 c 的新手,但我什至不知道如何描述这个问题(因此标题很糟糕)

注意* 'y' 数组有一个点,但为了简单起见,我在尝试解决问题时已将其从程序中删除。

最佳答案

i 未初始化。从未初始化的变量中读取会导致未定义的行为。通常它们会被堆栈上碰巧出现的任意数据所填充。将 i 设置为 0

您还应该在到达字符串末尾时停止循环。要么在您点击 '\0' 时停止,要么循环到 strlen(x)

for (int i = 0; i < 50 && x[i] != '\0'; i++)

int len = strlen(x);
for (int i = 0; i < len; i++)

关于C代码表现异常,特殊字符来自哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58123668/

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