実行環境
Windows10
Microsoft Visual Studio Community 2019
Version 16.3.6
#実現したいこと
Char型のポインタで参照された文字列を文字列順に出力したい
#知りたいこと
なぜこのポインタに何か文字列を足して出力すると予期しない結果が出るのかが知りたいです。
C++
1#include <iostream> 2using namespace std; 3 4int main() { 5 6 char a[] = "あいうえお";//配列の初期化 7 char* p = a;//ポインタの初期化 8 9 for (; *p; p++) {//for文による配列のループ 10 cout << *p << "\n"; //配列の中身がすべてでるまで出力 11 } 12 return 0; 13}
###---結果---
「 、 ヲ ィ
#試してみたこと
・1.文字列を追加しない
・2.文字コードとの関連性について調べる
#1.文字列を追加しない
C++
1#include <iostream> 2using namespace std; 3 4int main() { 5 6 char a[] = "あいうえお";//配列の初期化 7 char* p = a;//ポインタの初期化 8 9 for (; *p; p++) {//for文による配列のループ 10 cout << *p; //配列の中身がすべてでるまで出力 11 } 12 return 0; 13}
###---結果---
あいうえお
というように文字列をそのまま出力することはできます
ですがこのままでは文字列を追加することはできず不便です
それになぜポインタに文字列を追加して出力すると予期しない結果になるのかが不可解です
#2.文字コードとの関連性について調べる
なんとか判別できる文字の文字コードを調べてみたのですが
区 点 JIS SJIS EUC UTF-8 UTF-16 字 04 04 2424 82A2 A4A4 E38184 3044 い 01 54 2156 8175 A1D6 E3808C 300C 「 04 06 2426 82A4 A4A6 E38186 3046 う 01 02 2122 8141 A1A2 E38081 3001 、 04 10 242A 82A8 A4AA E3818A 304A お 05 03 2523 8342 A5A3 E382A3 30A3 ィ
関連性は特に感じられるものはありませんでした。
#推測したこと
おそらくではありますが
C++
1cout << *p << "\n";
この文を実行しcoutにアドレスか値を渡すときに
何らかの形で変化したのではないかと考えています
#是非ご回答お願いします。
入門したてで判断がつかずじまいで考えている状態です
どうかご教示ください。
本当によろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。