質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

3114閲覧

C言語でのcharポインタの扱いについて

wake_up_kemeko

総合スコア104

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/08/05 05:01

編集2015/08/05 05:08

C

1char* a="apple"; 2

というのはappleという文字列の格納された場所の先頭アドレスを受け取りに行っているんですよね?

C

1char* a; 2a="apple"; 3

となると正しい動作をしなくなる可能性があるのでしょうか?
また,理由としてはなぜでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2015/08/05 05:04

a="apple"では?
wake_up_kemeko

2015/08/05 05:07

ごめんなさい,その通りです.
guest

回答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

kutsulog

総合スコア985

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wake_up_kemeko

2015/08/05 07:55

const char* a = "apple"; const char* b; b="apple"; みたいなのがベストということですかね?
kutsulog

2015/08/06 01:48

文字列の編集(一部書き換え)をしないなら その通りですし、 文字列の編集をするなら const char *a = "apple"や const char *b; b = "apple"; から別途確保した文字列配列にコピーして コピーしたものを編集することになると思います
wake_up_kemeko

2015/08/06 03:25

なるほど,わかりやすいご説明ありがとうございます!
guest

0

ベストアンサー

http://www9.plala.or.jp/sgwr-t/c/sec10-3.html
a="apple";でも正しく動くはずです。
apple文字列の先頭文字のポインターを保持します。

投稿2015/08/05 05:29

MasaakiIrie

総合スコア1021

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

同じだと思いますが。

具体的に、何が問題となっているのでしょうか?

投稿2015/08/05 05:29

ta-kun

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wake_up_kemeko

2015/08/05 06:24

メモリアクセス違反的な問題が生じるのではないかと不安になりました.
guest

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

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問