2016-08-14 3 views
0

Cプログラミングで - 初心者ガイドの章19、例2、プログラムstrcatは()関数:Cプログラミング、絶対Beginner`sガイド - 第19章、strcatは()関数のコードdoesnの `tの仕事を適切

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char city[15]; 
    char st[3]; 
    char fullLocation[18]; 

    puts("What town do you live in? "); 
    gets(city); 

    puts("What state do you live in? (2-letter abbreviation)"); 
    gets(st); 

    strcat (fullLocation, city); 
    strcat (fullLocation, ", "); 
    strcat (fullLocation, st); 

    puts("\nYou live in "); 
    puts(fullLocation); 

    return 0; 

} 

私はこのプログラムをコンパイルすると、それはこれを表示します。コンソールウィンドウで

compiler`s出力:

enter image description here

任意のアイデアやexplanaをなぜそれらの奇妙な文字を表示するのですか?

+1

でヌル文字を探しているのないコピーは空の文字列で 'fullLocation'を初期化してみstrcpyのと最初 STRCATを置き換えることができます。 – s7amuser

+2

Cでは、 'fullLocation'はあなたが初期化していないのでガベージです。 strcatはヌルターミネータで始まる文字列に文字をコピーします。しかしそこにはヌルターミネーターはありません。 'fullLocation'を長さゼロの文字列にするには、最初の文字を0に設定します。' fullLocation [0] = 0; 'または宣言で{0}に初期化します。 –

+2

絶対初心者が書いたガイドからCを学ぶべきではないと思います。経験豊かなプログラマーが書いたテキストを見つけなければなりません。 – rici

答えて

1

これは、変数fullLocation、stおよびcityを初期化していないため、あなたのコードがガベージデータによってトリックされているからです。

は、宛先文字列にヌル文字から始まる、ここで先にhttp://www.cplusplus.com/reference/cstring/strcat/ strcatのコピー元を説明したように={0}

1

にそれらを同一視するようにしてください。 あなたの場合、fullLocationの文字はnullではありません。 あなたは

fullLocation[0]='\0'; 

を追加したり、目的地

関連する問題