![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
1.DumpDatというポインタに、テキストファイルから読み出した文字列(=aabb)を格納します。
2.cPtr=pDoc->GetDumpData(); にて、DumpDatのアドレスを取得し、cPtrに格納します。
3.wsprintf(cData,"%02X",*cPtr);にて、文字列を取り出し16進表記表示で、cDataに格納します。
4.TextOut(表示する文字数,文字の高さ,cData)で、cDataを表示します。
このとき、
1の時:DumpDatにファイルから読み出したデータは「(aabb)が入っていると考えています。
2の時:cPtrには、アドレスが格納されていると考えています。
3の時:cDataには、(61,61,62,62)が入ると考えています。
4の時:(61 61 62 62)が表示されると考えています。
<結果>
考えた内容と結果が異なりましたので、トレースしてみたところ、
・3の時に、「cData」には、(61)のaの一文字しか格納されていませんでした。
・結果、4の時に表示される文字は、61の1文字分でした。
3の段階で、全文字を取り出すのではなく、1文字文(61)しか取り出さないのはなぜなのでしょうか?
⇒(61 61 62 62)が抜けませんでした。
<質問>
ポインタから文字列を取り出す際は、1文字しか取り出さないのでしょうか?
ご教授よろしくお願いします。
No.5ベストアンサー
- 回答日時:
ポインター cPtr が4バイトの領域を指している、ということは間違いないのですか?
だとすれば、C言語の構文上、
*cPtr == *(cPtr + 0) == cPtr[0]
ですから、
*cPtr
と書くことで、cPtr が指している領域の先頭にアクセスできます。
以下同様に、
*(cPtr + n) == cPtr[n]
ですから、
*(cPtr + n)
または
cPtr[n]
と書くことで、cPtr が指している領域からnバイト分だけ離れた領域にアクセスできます(ただし、n=0~3)。
No.3
- 回答日時:
wsprintf(cData,"%02X",*cPtr) の結果が(61,61,62,62)になる、ということ自体が変です。
もしかして
wsprintf(cData,"%02X",*cPtr)が
wsprintf(cData,"%02X %02X %02X %02X",*cPtr,*cPtr(+1),*cPtr(+2),*(cPtr+3))
みたいに、文字列分繰り返される、とか考えてないんですか?
この回答への補足
情報ありがとうございます。
>wsprintf(cData,"%02X %02X %02X %02X",*cPtr,*cPtr(+1),*cPtr(+2),*(cPtr+3))
これは思いつきませんでした。メモリ内容を1つずつ動かしているんですよね。
ちょっと解決できそうな気がします。
No.1
- 回答日時:
>3の段階で、全文字を取り出すのではなく、1文字文(61)しか取り出さないのはなぜなのでしょうか?
⇒(61 61 62 62)が抜けませんでした。
cPtrの型がわかりませんが、1文字分だけ取り出すように書いてるからです。
この回答への補足
情報ありがとうございます。
>cPtrの型がわかりませんが、1文字分だけ取り出すように書いてるからです。
unsigned char *cPtr;
の宣言をしております。
char *cPtrは、1バイト宣言なので
これによって1文字分だけ取り出しているのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- その他(Microsoft Office) wordの差し込み印刷での日付表示 2 2023/08/15 16:51
- Excel(エクセル) エクセルにおいてセル内の文字を出来るだけ大きく表示する方法を教えてください。 4 2022/07/30 08:08
- PHP カラーミーショップのSmartyでの文字列抜き出し 2 2022/05/06 11:51
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Java 改行含むテキストの表示の仕方 1 2023/06/13 06:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
nullと""、\\0とEOFの違いにつ...
-
%dなどの違い
-
VB6.0でのバイナリデータの扱い...
-
16進数を2文字ずつ配列に格納し...
-
プログラムによく出てくるst...
-
C++で入力した文字列から数字を...
-
C#でstringをポインタとして渡す
-
WSH(VBS)でJSONの文字列を読み...
-
シリアル通信で0x00を送信した...
-
文字列にある特定文字の数
-
binaryに対して正規表現を適用...
-
文字列が格納されているポイン...
-
char型配列の最大要素数
-
C言語の意味
-
プログラミング C言語 意味がわ...
-
CSVファイルの「”」について
-
Excelシートを固定長のテキスト...
-
TCL言語で文字列検索方法を教え...
-
switch文について
-
関数から配列を返すには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
nullと""、\\0とEOFの違いにつ...
-
C++で入力した文字列から数字を...
-
%dなどの違い
-
C#でstringをポインタとして渡す
-
16進数を2文字ずつ配列に格納し...
-
TCL言語で文字列検索方法を教え...
-
プログラムによく出てくるst...
-
WSH(VBS)でJSONの文字列を読み...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
数字の入った配列をファイルへ...
-
VB6.0でのバイナリデータの扱い...
-
構造体→文字列→構造体 をする方法
-
char型配列の最大要素数
-
[C++]WCHARの1文字目しか表示で...
-
アルファベットをカウント、
-
c#で他のアプリの文字入力フォ...
-
VBA-DLLの引数受け渡しについて
-
C言語の勉強しています。すみま...
-
Shift_JIS(16進)を文字に変換す...
-
バイナリファイル中の日本語文...
おすすめ情報