我正在学习教科书c。其中一个练习就是从书中复制代码以演示使用scanf。它可以获取用户输入应该打印多少次的内容。使用for循环打印出字符串,字符串的最后字符似乎已经混乱了。请参阅下文,任何帮助将不胜感激。到目前为止,我已尝试删除' \ n'看看是否可能导致问题。我已经在循环之前打印出字符串,看看它是否是字符串的错误,但它似乎在循环外工作正常。代码如下:
#include <stdio.h>
#include <string.h>
int main(void)
{
char message[10];
int count, i;
strcpy(message, "Hello, World!");
printf("Repeat how many times? ");
scanf("%d", &count);
printf("%s\n", message);
for(i = 0; i < count; ++i)
{
printf("%3d - %s\n", i, message);
}
return 0;
}
结果:
Repeat how many times? 3
Hello, World!
0 - Hello, Wor
1 - Hello, Wor
2 - Hello, Wor
提前致谢。
答案 0 :(得分:0)
欢迎来到StackOverflow
。网站的名称是您的问题的答案。您试图将14个字符存储到一个最多可容纳10个字符串的字符串中。之后发生的所有事情都是未定义的行为。
什么是未定义的行为?
未定义未定义的行为。它可能会使您的程序崩溃。它可能会 什么都没有。它可能完全符合您的预期。它可能会召唤 鼻子恶魔。它可能会删除您的所有文件。编译器是免费的 在遇到任何代码时(或根本没有代码)发出任何代码 未定义的行为。
任何未定义行为的实例都会导致整个程序 undefined - 不仅仅是未定义的操作,所以编译器 可以对你的程序的任何部分做任何想做的事情。包括时间 行程。