を比較することができ
char* p = strchr(userInput,'\n');
if (p != NULL) *p = '\0';
ような何かを行うことができます。
私は簡潔にするための識別子s
の代わりuserInput
を使用してみましょう:
0 1 2 3 4 5 9
+---+---+---+---+---+---+-- --+---+
s -> | p | i | p | p | o | \0| ... | |
+---+---+---+---+---+---+-- --+---+
は
char s[10] = "pippo";
を作成しますものです。
つまり、図のように最初の6 バイトが初期化されたメモリブロックです。 s
変数はありません。
代わりに、
で
char *s;
ようchar *
を宣言するchar
へのポインタを保持できる変数を作成します。
+------------+
s| 0xCF024408 | <-- represent an address
+------------+
あなたがこの方法を考える場合、あなたがやっていることをすぐに気づく:
を
scanf("%s",s);
fiで意味がある文字列を保持するのに十分なメモリがある最初のケースです。
2番目のケースでは、変数s
がランダムなアドレスを指していて、未知のメモリ領域に何かを書き込むことになります。
完全にするために、同様のケースで:
char *s = "pippo";
あなたは、メモリ内の次のような状況があります。
0 1 2 3 4 5
+---+---+---+---+---+---+ Somewhere in the
0x0B320080 | p | i | p | p | o | \0| <-- readonly portion
+---+---+---+---+---+---+ of memory
+------------+ a variable pointing
s| 0x0B320080 | <-- to the address where
+------------+ the string is
あなたがどこか他s
ポインティングを行うことができますが、あなたはの内容を変更することはできません文字列はs
です。
'char * userInput;' - > 'char userInput [16];' – BLUEPIXY
'scanf'が未設定ポインタになっていますか?誰があなたにそれを提案しましたか? – John3136