为什么在c语言中会出现这种奇怪的输出?
我有以下程序为什么在c语言中会出现这种奇怪的输出?,c,C,我有以下程序 #include <stdio.h> main() { char ch[10]; gets(ch); printf("\nTyped: %s\n\n", ch); int i = 0; while ( ch[i] != '\0' ) { printf("Letter: %c\n", ch[i]); i++; } printf("\nTyped: %s\n\n",
#include <stdio.h>
main()
{
char ch[10];
gets(ch);
printf("\nTyped: %s\n\n", ch);
int i = 0;
while ( ch[i] != '\0' )
{
printf("Letter: %c\n", ch[i]);
i++;
}
printf("\nTyped: %s\n\n", ch);
}
为什么在while循环之后,同一个命令会得到两个不同的输出?while循环是否与此有关。。请帮忙。你知道“Hello world is good”超过10个字节吗?本例中的行为是未定义的。任何事情都有可能发生,任何事情都有可能发生,从按自己的意愿工作到重新格式化硬盘驱动器导致系统彻底崩溃,再到在ROM上烧掉垃圾
您必须为get
分配足够的空间来放入字符串,在这种情况下,您不需要。这就是为什么应该避免使用get
,而是使用fgets
。你知道“Hello world is good”超过10个字节吗?本例中的行为是未定义的。任何事情都有可能发生,任何事情都有可能发生,从按自己的意愿工作到重新格式化硬盘驱动器导致系统彻底崩溃,再到在ROM上烧掉垃圾
您必须为
get
分配足够的空间来放入字符串,在这种情况下,您不需要。这就是为什么应该避免使用gets
,而是使用fgets
。好吧,您只分配了10个字符(char ch[10]
),适合“hello worl”。之后,您试图打印的内存中只有垃圾。好吧,您只分配了10个字符(char ch[10]
)来匹配“hello worl”。之后,您试图打印的内存中只有垃圾。您的字符数组ch
只有10个字符的空间。您键入了长度超过10个字符的内容,并试图将其存储在该数组中,从而有效地将超出数组末尾的内容写入未为任何内容保留(或至少未为您的字符保留)的空间。在这种情况下,您很幸运,没有写任何重要的东西(您的程序没有崩溃),但随后的代码出现了(您的printf()
,int i,等等),并更改了内存(毕竟它是堆栈,所以它以FIFO顺序使用)
将char-ch[10]
更改为char-ch[2048]
,以便为自己提供一个更大的缓冲区来进行输入。您还可以使用fgets()
而不是gets()
,以便将输入大小限制为缓冲区大小。如果使用get()
,请注意手册页上的警告:
调用者有责任确保输入行
任何一根都足够短,可以插进绳子里
您的字符数组
ch
只能容纳10个字符。您键入了长度超过10个字符的内容,并试图将其存储在该数组中,从而有效地将超出数组末尾的内容写入未为任何内容保留(或至少未为您的字符保留)的空间。在这种情况下,您很幸运,没有写任何重要的东西(您的程序没有崩溃),但随后的代码出现了(您的printf()
,int i,等等),并更改了内存(毕竟它是堆栈,所以它以FIFO顺序使用)
将char-ch[10]
更改为char-ch[2048]
,以便为自己提供一个更大的缓冲区来进行输入。您还可以使用fgets()
而不是gets()
,以便将输入大小限制为缓冲区大小。如果使用get()
,请注意手册页上的警告:
调用者有责任确保输入行
任何一根都足够短,可以插进绳子里
好吧,一方面是大教堂,另一方面是怪异:^)永远不要使用
get
!从不好吧,一方面是大教堂,另一方面是怪异:^)永远不要使用get
!从不但为什么它会在被立即调用时完全打印出来。。。而不是在while循环之后??这是我的问题。。。为了测试这一点,特意使用了10字节。。你能帮忙吗now@srisar-行为未定义。为什么?因为任何答案都是错误的。你不应该这样做。可能是因为之后你分配了一个整数,这会弄乱先前分配的字符数组。投票人往往是懦夫,这是匿名投票的必然结果。我抵消了它。但为什么它在被立即调用时完全打印出来。。。而不是在while循环之后??这是我的问题。。。为了测试这一点,特意使用了10字节。。你能帮忙吗now@srisar-行为未定义。为什么?因为任何答案都是错误的。你不应该这样做。可能是因为之后你分配了一个整数,这会弄乱先前分配的字符数组。投票人往往是懦夫,这是匿名投票的必然结果。我抵消了它。
hello world is good
Typed: hello world is good
Letter: h
Letter: e
Letter: l
Letter: l
Letter: o
Letter:
Letter: w
Letter: o
Letter: r
Letter: l
Letter:
Typed: hello worl♂