2016-12-20 7 views
0

私はあなたに質問があります。私は、Cおよびメモリの割り当てにポインタに関するいくつかの情報を読んでいた、と私はそれが実行時にエラーを作成する小さなプログラムを見ました:c-説明のプログラムエラー

#include <stdio.h> 

char* getname(void){ 
    char nstring[25]; 
    printf("Please type your name"); 
    gets(nstring); 
    putchar('\n') 
    return nstring; //Serious error in this program 
} 

int main(void){ 
    char* myname; 
    myname = getname(); 
    printf("%n\n", myname); 
    return 0; 
} 

なぜ、このプログラムでは、」重大なエラーを言うのコード内のコメントがあります"?私はどこでエラーが起こっているのか分かりません。誰かが私にそれを説明することはできますか?

+1

オブジェクトの存続期間が終了した後にアクセスするための未定義の動作。ポインタが指すオブジェクトの存続期間後にポインタの値を使用するための未定義の動作が終了しました。 – EOF

+2

'gets'は決して使用しないでください。それは危険であり、遅かれ早かれ悪事が起こることになります。また、C99標準から非難され、C11標準で完全に削除されました。代わりに['fgets'](http://en.cppreference.com/w/c/io/fgets)を使用してください。 –

答えて

1

「このプログラムの重大なエラー」というコードには、なぜコメントがありますか?

ローカル文字列を返すので、char nstring [25];スコープと寿命が未定義の動作である特定の関数に限定されている