gpt4 book ai didi

c - 为什么这段代码不能打印数组中的字符?

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

我使用 gcc (tdm-1) 5.1.0 编译了这段代码,请告诉我为什么输出不包含“hello”

#include<stdio.h>
void main()
{
int i;
char st[20];
printf("Enter a string ");
scanf("%s",st);
for(i=0;i<20;i++)
{
printf("%c",st[i]);
}

}

Input:hello Output: @ @

最佳答案

您打印数组的所有 20 个元素,但如果用户输入的字符串小于该值,则并非所有元素都将被初始化。它们将不确定并且看似随机。

请记住,C 中的 char 字符串实际上称为 null-terminated 字节字符串null-terminated 位很重要,这意味着您可以通过再次检查当前字符 '\0'(这是终止符)轻松找到字符串的结尾.

或者您可以只使用 strlen函数来获取字符串的长度:

for(i=0;i<strlen(st);i++) { ... }

或者使用"%s"格式打印字符串:

printf("%s", st);

另请注意,如果没有任何保护,scanf 函数将允许您提供比数组中的空间更长的输入,因此您需要再次保护它,例如通过限制字符数量 scanf 将读取:

scanf("%19s",st);  // Write at most 19 character (*plus* terminator) to the string

现在为什么你的输入似乎没有被打印出来,这是因为未初始化元素的不确定内容。虽然您没有超出数组的范围,但您仍然超出了实际字符串的范围。越界导致 undefined behavior .

可能发生的事情是一些“随机”不确定的内容恰好是一个回车符'\r',它将光标移动到该行和已经写入的输出将被数组中未初始化的元素覆盖。

关于c - 为什么这段代码不能打印数组中的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52253281/

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