こんにちは私は以下のプログラムを持っています。char *の値を変更するにはどうすればよいですか?
char *x="abc";
*x=48;
printf("%c",*x);
これは私に出力a
を与えますが、私は0
として出力を期待。
EDIT は、私はあなたがstring literalを変更する(もしよう)することはできません
char *x;
こんにちは私は以下のプログラムを持っています。char *の値を変更するにはどうすればよいですか?
char *x="abc";
*x=48;
printf("%c",*x);
これは私に出力a
を与えますが、私は0
として出力を期待。
EDIT は、私はあなたがstring literalを変更する(もしよう)することはできません
char *x;
で、実行時にデータを格納するために何ができるかを提案することができます。それはundefined behaviorを引き起こします。
書き込み許可のメモリを使用する必要があります。 2つの方法があります。
(すなわち、x
にメモリアロケータ方法によって返されたポインタを格納する)x
をポインタにメモリを割り当て、これは書き込み可能、およびstrcpy()
を使用してリテラル文字列をコピーします。
char * x = NULL;
if (x = malloc(DEF_SIZ)) {strcpy(x, "abc");}
OR、NOT厳密に標準準拠、より短い、strdup()
。
char *x = strdup("abc");
アレイx
を使用して、文字列リテラルで初期化。
char x[] = "abc";
、x
(またはむしろ、x
によって指し示されたメモリ位置)が変更可能です。
これをさらに明確にするために、私の答えの例をあなたのコピーに害はありません。 – Bathsheba
@ Bathshebaそれはあなたの答えにとにかくそこにあるので、私は繰り返さなかったが、それがこれをより良くすると思うなら、とにかく害はない。 –
@mchコピー・ペーストが原因です。 :) –
新しいアドレスを割り当てます。 *を指しているものを変更するつもりでしたか? – StoryTeller
[* magic numbers *](https://en.wikipedia.org/wiki/Magic_number_(プログラミング))は使用しないでください。あなたが文字 '' 0 ''を意味するならば、* say * so。 –
@StoryTellerはい。私はそれを指しているものを変更したい。 – abhinandanbr