2016-06-22 12 views
-1

私は教科書を学習中です。c。練習の1つは、本からのコードを文字通りコピーしてscanfを使って説明することです。何回何を何回印刷するべきかについてのユーザ入力を得る。 forループを使用して文字列を出力すると、文字列の最後の文字が混乱しているように見えます。以下を参照してくださいと助けていただければ幸いです。これまでのところ、問題の原因になっているかどうかを確認するために '\ n'を削除しようとしました。ループの前に文字列を表示して、文字列との間にエラーがあるかどうかを確認しましたが、ループの外側で正常に動作するようです。以下のコード:forループは正しく印刷されませんが、印刷は正常に終了します。

#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 

感謝。

+3

、未定義の動作を記述します。 – EOF

+2

あなたは10を保持する配列に14文字(13プラスゼロバイト)を書いています。あなたはスタックを壊しており、そのポイントの後のすべては未定義の動作です。細心の注意を払う! –

+0

*定義されていない動作*を説明するのは実際には有効ではありませんが、適合すれば満足できるものです。 *おそらく*あなたが 'i'を使い始めたとき、文字列が壊れてしまいました。これは長さが不十分なために' i'にあふれました。 –

答えて

0

StackOverflowへようこそ。サイトの名前があなたの質問に対する答えです。あなたは10まで保持することができる文字列に14文字を格納しようとしています。それ以降に起こるすべては未定義の動作です。

未定義の動作とは何ですか?

未定義の動作は未定義です。プログラムがクラッシュする可能性があります。 は何もしません。それはあなたが期待したことを正確に行うかもしれません。それは鼻の悪魔 を召喚することがあります。すべてのファイルが削除されることがあります。コンパイラは、 は、それが喜んで(またはまったく)何のコードを出しても、 未定義の動作に出会ったときに自由に出ます。

定義されていない動作のすべてのインスタンスは、プログラム全体が になります。定義されていない操作だけでなく、コンパイラ はプログラムの任意の部分に何でもしてもかまいません。時間を含めて 旅行。アウトオブバウンド

Read this

+0

素晴らしい。有益な答えMirakurunのおかげで! – rayzor

+0

ようこそ。あなたが答えに満足すれば、あなたはそれを受け入れることができるので、将来の参考のために質問に答えます。 – Mirakurun

関連する問題