2017-02-08 3 views
-1

私は、次のコードを持っている:次のCコードはなぜdevC++ではなくturbo cで動作しますか?

char *str; 
gets(str); 

は、今ではターボCで動作しますが、DEVC中に失敗しました。

devC++で動作させるには、以下を追加する必要があります。

誰も説明することはできますか?

また、本物でより正確なコーディング形式です。

+2

1)は使用しません ')(取得' 2)割り当てられていない文字列の未定義の動作。 –

+1

ポインタにメモリが割り当てられていないため、「Turbo Cで動作する」というのは謎です。 –

+0

あなたは['gets'](http://en.cppreference.com/w/c/io/gets)を読みたいかもしれません。 –

答えて

0

char *str; 
gets(str); 

だけは、右することはできませんことを。 strは初期化されておらず、getsはポインタを値で受け取り、内部的に割り当てることができません。あなたはちょうど未定義の振る舞いで幸運/不運です。

どちらが本物で正しいコーディング形式ですか?

上記のうちどれも該当しません。 getsを使用しないでください。入力サイズを制限できないため、安全ではありません。 (!そしてもちろん割り当てられたバッファ)指定されたサイズでfgetsを使用

#include <stdio.h> 
char buffer[20]; 
fgets(buffer, sizeof(buffer), stdin); // reads at most 19 chars + null-termination 

またはscanfをサイズ制限を(-1に注意してください):scanf("%19s",buffer);

関連する問題