字符串在for循环中打印不正确,但之前打印正常

时间:2016-06-22 22:36:28

标签: c for-loop strcpy

我正在学习教科书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

提前致谢。

1 个答案:

答案 0 :(得分:0)

欢迎来到StackOverflow。网站的名称是您的问题的答案。您试图将14个字符存储到一个最多可容纳10个字符串的字符串中。之后发生的所有事情都是未定义的行为。

什么是未定义的行为?

  

未定义未定义的行为。它可能会使您的程序崩溃。它可能会   什么都没有。它可能完全符合您的预期。它可能会召唤   鼻子恶魔。它可能会删除您的所有文件。编译器是免费的   在遇到任何代码时(或根本没有代码)发出任何代码   未定义的行为。

     

任何未定义行为的实例都会导致整个程序   undefined - 不仅仅是未定义的操作,所以编译器   可以对你的程序的任何部分做任何想做的事情。包括时间   行程。

Read this