2016-10-28 3 views
-2

とCのcharを印刷:私はそれを実行するとは、私は次のコードを持っているのprintf文句を言わない印刷

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

int main(void) 
{ 
    char buff[50]; 
    int pass = 0; 

    printf("\n Enter the password : \n"); 
    gets(buff); 
    char str[80]; 
    strcat(str, "nw"); 
    strcat(str, "ww"); 
    strcat(str, "io"); 
    strcat(str, "oi"); 

    char str2[22]; 
    strcat(str2, "jm"); 
    strcat(str2, "qw"); 
    strcat(str2, "ef"); 
    strcat(str2, "io"); 
    strcat(str2, "nw"); 
    strcat(str2, "ce"); 
    strcat(str2, "or"); 
    strcat(str2, "ww"); 
    strcat(str2, "qf"); 
    strcat(str2, "ej"); 
    strcat(str2, "oi"); 


    if(strcmp(buff, str)) 
    { 
     /* we sf as df er fd xc yyu er we nm hj ui ty as asd qwe er t yu as sd df rt ty qw sd password */ 

     printf ("\n Wrong Password \n"); 
    } 

    else 
    { 
     printf ("\n Correct Password \n"); 
     pass = 1; 
    } 

    if(pass) 
    { 
     printf ("\n\n\n\n\n\n\n%s", str2); 
    } 

    return 0; 
} 

を私が取得:

[email protected]:~# ./root.flag 

Enter the password : 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 

Wrong Password 







Segmentation fault (core dumped) 

それは価値ストア改行文字を出力しますが、ありませんstr2。 str2をスクリーンに印刷するにはどうすればいいですか?私はまったく新しいC言語なので、なぜこれが動かないのか分かりません。私が見落としていることは簡単かもしれません。

+0

あなたのコードには '%c'変換タイプ指定子がありません。 – Olaf

答えて

5

buffは50文字ですが、131 "A" 'と入力すると未定義の動作になります。 また、str2は22文字で、23文字にする必要があります。また、 '\ 0'はNULLで終了してください。 実際には、初期化する前にstrcatする必要はありません。試みるstr2[23] ={0};

関数strcat(str、new)は文字列strの終わりを探してnewに文字を追加し始めます。文字列の終わりは '\ 0'またはゼロとして定義されます。ローカル変数を初期値に設定して、必要な値が設定されていることを確認する必要があります。そのコードはstr1[80]={0};str2[23]={0};

+1

'strcat'sも' str'と 'str2'が初期化されていないのでUBです – yano

+0

@yanoはそれを得て、ちょうど答えを更新しました。 – cleblanc

+0

誰かがこのコードが意味することを誰かに教えてもらえますか? – ChrisMan

関連する問題