2016-07-01 8 views
-3

私はプログラミングが初めてです。私はこの簡単なコードを入力し、私はこのエラーメッセージが表示され続けます。コンパイラが動作を停止する理由を知っている人はいますか?コンパイラの設定を確認して、自動検出をクリックしました。それでもまだ動作しません。名前をスキャンしようとすると、セグメンテーションフォルトが生成されるのはなぜですか?

ご迷惑をおかけして申し訳ございません。 Btw私はプログラミングに慣れていないので何かを説明するとそれを分解する。

#include <sdtio.h> 
#include <stdlib.h> 

int main() 
{ 

    int name; 
    printf("What is your name?\n"); 
    scanf("%s", name); 

    printf("Your name is %s", name);  
    return 0; 
} 
+0

ようこそスタックオーバーフロー!あなたの研究努力を時間までに示してください。まず[Ask]ページをお読みください。 –

+1

テキストの画像を投稿しないでください。ここにコピーして貼り付けてください。 – dbush

+0

コンパイラは動作を停止しません。実行するとクラッシュするプログラムです。 – melpomene

答えて

1

ここでの問題は、特定の書式指定子に間違った引数型を使用していることです(逆も同様です)。 %sは、charの配列を引数として取ります(intではなく)。それはundefined behaviorを呼び出します。

あなたは正しいだろう%s書式指定子を使用して、その後

#define SIZE 32 
char name[SIZE] = {0}; 

と同様に、入力文字列、何かにchar配列を使用する必要があります。何かのように

scanf("%31s", name); //32-1, reserve one for null-terminator 

を実行します。

+0

'scanf''%s'はバッファオーバーフローが起こるのを待っています。ある意味では、 '%s'は決して正しくありません。 – melpomene

+1

@melpomeneあなたがいない限り、それは起こらないようにしてください。更新しました。 :) –

+1

私たちの答えはほとんど同じです..それはそれを削除しました。いい答え :) – Cherubim

0

%s形式指定子(charの配列を指す)charへのポインタを受け取るが、nameintあります。

nameを文字配列に変更します。

char name[100]; 
関連する問題