#include <iostream> #include <string>int main() { std::string str = "abcdef"; std::size_t i = 1; std::cout <<str[i] <<std::endl; std::cout <<&str[i] <<std::endl; return 0; } において、 std::cout <<&str[i] <<std::endl;の&str[i] はアドレスを扱うと思っていたのですが、Cでは&str[i] はアドレスを扱うのにC++では&str[i] はアドレスではなく文字や文字列を扱うのでしょうか? ちなみに、Cのように以下のプログラムのようにC++で一文字だけ扱うように書くにはどう書けばいいのでしょうか? char* p, * q; int ch; ch = *q; また、こちらのプログラムは実行してもエラーが起きるのですが、何が原因なのでしょうか? #include <iostream>#include <string>int main() { std::string str = "abcdef"; std::size_t i = 1; std::cout <<*(str + i) <<std::endl; std::cout <<(str + i) <<std::endl; std::cout <<&*(str + i) <<std::endl; return 0; } ちなみに、 std::cout <<*(str + i) <<std::endl; は文字列の先頭のアドレスを+1したメモリにある数値(文字コード)を文字として表示する。 std::cout <<(str + i) <<std::endl; は文字列の先頭のアドレスを+1したメモリのアドレスを表示する。 std::cout <<&*(str + i) <<std::endl; は文字列の先頭のアドレスを+1したメモリのアドレスを表示する。 だと思っているのですが、CとC++では同じ書き方でも扱い方が違うので自信はありません。違う場合は正しい答えを教えてください。
No.3ベストアンサー
- 回答日時:
とりあえず、いわゆる C文字列(C++でもそのまま使える)と、std::string は、別物です。
C文字列は、Cの時代に文字列を直接扱う方法がなかったので、char のポインタを経由して「文字列もどき」にしたものですし、std::string は、ちゃんとした文字列です(で、おまけとして、C文字列風に使う機能もあります)
あと、
> 実行してもエラーが起きるのですが
という質問をする場合には、エラーの内容は明示しましょう。
No.2
- 回答日時:
>Cでは --------- 扱うのにC++では ------- 扱うのでしょうか?
例外はあるかもしれませんが、
Cとして解釈できるC++の記載は、Cの記載と等しい意味である
と理解してよいと思いますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# このプログラミング誰か教えてください。 2 2022/04/22 18:48
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- C言語・C++・C# このプログラミング誰か教えてください 9 2022/04/22 18:50
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
enumの値から定義名を文字列化...
-
なぜ、C++の標準ヘッダをインク...
-
空ENTERの判別
-
指定した文字を削除したい
-
#defineの使い方について
-
snprintfが使用できない。
-
wstringの主力
-
std::map の const 修飾について
-
#define中の#のエスケープ
-
c++のvirtual関数および継承に...
-
C++ 数値データファイルから2次...
-
C++で、環境変数の読み込み方を...
-
構文エラーが出ているのですが...
-
c++ ファイルからの複素数の読...
-
string型のフォーマット書式指...
-
gccでコンパイル時のエラー
-
C++文字配列ソート関数を教えて...
-
C言語のエラーを修正したい
-
iostream インクルード時に発生...
-
_tcscat がうまくいきません(V...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
空ENTERの判別
-
C++でShowCursorを使いたい。
-
なぜ、C++の標準ヘッダをインク...
-
#define中の#のエスケープ
-
C++で、テキストファイルを一行...
-
gccでコンパイル時のエラー
-
C言語のエラーを修正したい
-
#include "fstream.h"
-
C言語のポインターで詰まっている
-
リモートデスクトップの接続元I...
-
構造体配列のvectorへの変換と...
-
JPEGやPNGが読めるLoadImage関数
-
VS2019でofstreamが未定義になる
-
構造体に決められた文字列を入...
-
VHDLのsignedとunsignedの違いは?
-
std::wstringのメモリリークに...
おすすめ情報