C
1char* a="apple"; 2
というのはappleという文字列の格納された場所の先頭アドレスを受け取りに行っているんですよね?
C
1char* a; 2a="apple"; 3
となると正しい動作をしなくなる可能性があるのでしょうか?
また,理由としてはなぜでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/05 05:07
回答4件
0
文字列リテラル("apple")はシステム実行時にメモリ確保されて
その先頭ポインタ(const char*型)を使用します。
const char*型なので
C
1char *a = "apple"; 2
や
C
1char* a; 2a="apple";
だと警告のレベルによってはwarningがでるはずです。
参照だけなら動きますが
実体はconst char*なので
C
1a[0] = 'A'; 2
みたいに書き換えることはできません。
投稿2015/08/05 06:32
総合スコア985
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/05 07:55
2015/08/06 01:48
2015/08/06 03:25
0
ベストアンサー
http://www9.plala.or.jp/sgwr-t/c/sec10-3.html
a="apple";でも正しく動くはずです。
apple文字列の先頭文字のポインターを保持します。
投稿2015/08/05 05:29
総合スコア1021
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
同じだと思いますが。
具体的に、何が問題となっているのでしょうか?
投稿2015/08/05 05:29
総合スコア59
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
c言語はもうずいぶん前にやっていた言語ですが・・・
char ポインタ型のお話ですね?
char* a(Cっぽく書けば、char a でしょうかね?)の a は、char ポインタ型変数ということで、アドレスが代入される変数です。
なので、
char a="apple";
というのは、間違いです。(aにはchar型のメモリ実体がありません)
char* a;
char b[10] = "apple";
a = &(b[0]); //a=b でも良かったかな・・・???
とすればよいです。
この場合、aはbのchar型のメモリのアドレスを押さえています。
あと、文字列代入は、
a="apple";
よりも
strcpy(a, "apple");
の方が正しいです。=での代入は初期化するときのみです。
・・・以上、間違いないといいですが・・・
失礼しました。
投稿2015/08/05 05:40
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。