#include " STDAFX.H " の#include " STDLIB.H " INT _tmain(int型 ARGC、_TCHAR * ARGV []) { // 入力文字列 のchar * STR; scanfの(" %のS " 、STR); のprintf(" 出力入力文字列str =%のS * \ N- "& STR); システム(" PAUSE " ); 戻り 0 ; }
コードは、ポインタの問題が表示されます
理由:
非常に使いやすいメモリエラーが発生します。
するchar * strが、彼の値は予測できない値であり、ポインタを宣言しますが、初期化されません。いくつかの空のメモリを指すことがあり、それは無用メモリアドレスではないかもしれないが、他のプログラムで使用するメモリアドレスを指すことがあります。
scanf関数(「%sは」、STR ); これは、文字列を取得する手段、及び文字列が後に参照されるメモリアドレスSTRに空間です。この手順は適用されませんが、メモリ空間、メモリ空間は、上記の3例その部分に呼ばれています。別のプログラム、他のプログラムがクラッシュを変更するためにメモリの内容となりますが可能です。
printf(「入力文字列の出力* STR =%sの\ n」は 、&STR);
これは、出力文にも問題がある、&STR STR変数がstrがない文字列へのヘッドポインタのアドレスである値、変更する必要がありますアドレス。メモリ内&STR STR変数のアドレス。strの先頭ポインタ値は、文字列のアドレスです
改正:
#include " STDAFX.H " の#include " STDLIB.H " INT _tmain(int型 ARGC、_TCHAR * ARGV []) { // 入力文字列 チャー STR [ 50 ]; scanfの(" %S " 、STR); のprintf(「出力列入力STR =%のS * \ N- ' 、STR); システム(" PAUSE " ); 戻り 0 ; }
または:
#include " STDAFX.H " の#include " STDLIB.H " INT _tmain(int型 ARGC、_TCHAR * ARGV []) { // 入力文字列 のchar * STR =(チャー *)のmalloc(100 ); scanfの(" %S "STR); のprintf(" 出力列入力STR =%のS *の\のN- "STR); システム(" PAUSE " ); 戻り0 ; }