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

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

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

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

Q&A

解決済

3回答

353閲覧

文字列がよく分かりません(C++,Visual Studio)

robomoco

総合スコア31

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

0グッド

0クリップ

投稿2018/11/28 07:19

#include <iostream> #include <cstring> using namespace std; int main(){ char a[80]="teratail"; cout << a << endl;

上のコードが何の問題もなく,実行されるのに対し,下のコードだとエラーが生じる原因が分かりません。

#include <iostream> #include <cstring> using namespace std; int main(){ char *a[80]="teratail"; cout << *a << endl;

もう一つ,

#include <iostream> #include <cstring> using namespace std; int main(){ char b[80]; strcpy_s(b,"teratail"); cout << b << endl;

は普通に問題なく実行してくれるのですが,以下のコードだとエラーが起きる原因が分かりません。

#include <iostream> #include <cstring> using namespace std; int main(){ char *b[80]; strcpy_s(*b,"teratail"); cout << *b << endl;

何かの本で,ポインタ変数と言えど*を付ければ普通の変数として扱えるとあったので,うまくかと思いきや,上のような結果になったので困惑しています。

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

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

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

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

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

guest

回答3

0

何かの本で,ポインタ変数と言えど*を付ければ普通の変数として扱えるとあったので,

文字通りには間違いですね。
おそらく、ある文脈の中での説明だったものを、文脈を無視して解釈したのでしょう。

文字の配列(a[80])と、「文字へのポインタ」の配列(*a[80])は、全く違うものです。
また、「文字列の中」はそのまま参照できますが、「「文字へのポインタ」変数の指す物」をアクセスするには、そのポインタ変数に文字エリアのアドレス値を設定してからアクセスする必要があります

投稿2018/11/28 08:04

otn

総合スコア84487

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

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

0

ベストアンサー

char *a[80]="teratail";
cout << *a << endl;
の代わりに
char *a="teratail";
cout << a << endl;
ではどうだろうか?
コンパイラによってはエラーが出るかもなのでその時は
const char *a="teratail";
cout << a << endl;
ではどうだろうか?
はっきりいえるのは
char *a[80]="teratail";
はだめであること。文字列の代入は=ではできないのだ。

投稿2018/11/28 08:28

編集2018/11/28 08:45
kokawa2003

総合スコア217

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

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

0

char *a[80]="teratail";

これは、charのポインタの配列を定義してます
ポインタの配列の初期化なのに、文字列持ってきてるので当然エラーになりますな

投稿2018/11/28 07:23

y_waiwai

総合スコア87747

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問