2016-09-26 13 views
3

文字列から空白を削除するカスタムコードを作成しました。しかし、私はそれを実行したとき、入力がなければ、2番目の文字列は3つのガベージ値を与え、余りにも多くのスペースがあると、コードは時には独自のスペース文字列を追加します。ごみ、その後、私はちょうど3つのゴミ値は:(ガベージ値のソースを見つける

#define SIZE 200 
int main() 
{ 
    int w=0, z=0, x=0, y=0, z0, rDlength=0, Dlength=0, RandomChar, Dx=0, Dy=0; 
    char rstring[SIZE], string[SIZE]; 
    srand(time(NULL)); 

    //debug 
    int space=0; 

    printf("Input Text: "); 
    gets(rstring); 
    strupr(rstring); 
    strlen(rstring); 
    rDlength=strlen(rstring); 

    //debug 
    printf("%d\n", rDlength); 

    w=-1; 
    for(z=0;z<=rDlength;z++) 
    { if(rstring[z]==' ') 
     { space++; 
      continue; 
     } 
     else if(rstring[z]=='\0') 
      break; 
     else if(rstring[z]!=' ') 
      string[++w]=rstring[z]; 
    } 

    //debug 
    printf("%d\n", space); 

    Dlength=strlen(string); 

    for(z=0;z<rDlength;z++) 
     printf("%c", rstring[z]); 
    printf("\n"); 

    for(z=0;z<Dlength;z++) 
     printf("%c", string[z]); 
    printf("\n"); 

    printf("String length is %d\n", Dlength); 
    return 0; 
} 

どこから来た少なくとも3つの入力文字がある場合、その後、ガベージ値が消えるように見える見つけることができません。しかし、2つまたは1文字があるかどう値が表示されます。

+0

コードを読むことができません。適切に書式設定してインデントしてください。フォーマットをあまりに創造的にしないでください。 – Olaf

+0

charをcharでコピーしている配列を 'string'で終了していません。だから 'Dlength = strlen(string);'は正しい答えを出しません。 –

+0

ああ、申し訳ありませんオラフ、私はこのサイトではとても新しいです。もし私が聞くことができるなら、インデントとフォーマットの意味はどうですか? –

答えて

2

をあなたはstringに文字を追加すると、あなたがそう。初期化されていないstring過去の任意の要素を終端のNULL文字を追加していません。strlenを呼び出し、その後undefined behaviorに生じるもの初期化されていない文字を読み込みます。

後文字をコピーするrsにヌルターミネータを最後に追加してください。

for(z=0;z<=rDlength;z++) { 
    if(rstring[z]==' ') { 
     space++; 
     continue; 
    } 
    else if(rstring[z]=='\0') 
     break; 
    else if(rstring[z]!=' ') 
     string[++w]=rstring[z]; 
} 
string[++w]='\0'; 
+0

ああ、私は全く気付かなかった!ありがとうございました!、コードは今すぐうまくいきます!お大事に! :D –

関連する問題