- ベストアンサー
char[]とchar*
#include<iostream.h> main() { char str1[] = "AB"; char *str2 = "ab"; *(str1+1) = 'C'; *(str2+1) = 'c'; printf("%s\n", str1); printf("%s\n", str2); } このソースの *(str2+1) = 'c'; の所はC++では間違った処理ですか? []かnewなどの変数なら書き換えてよいのは分かりますが、str2はこれでよいのか教えて下さい。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (9)
- jacta
- ベストアンサー率26% (845/3158)
回答No.10
- MrBan
- ベストアンサー率53% (331/615)
回答No.9
- MrBan
- ベストアンサー率53% (331/615)
回答No.8
- jacta
- ベストアンサー率26% (845/3158)
回答No.7
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.6
- suseimei
- ベストアンサー率35% (17/48)
回答No.5
- suseimei
- ベストアンサー率35% (17/48)
回答No.4
- MrBan
- ベストアンサー率53% (331/615)
回答No.3
- jacta
- ベストアンサー率26% (845/3158)
回答No.1
お礼
004113CF C6 40 01 63 mov byte ptr [eax+1],63h のところで+1を見落としていました。 eax+1が指すメモリ、つまり"ab"のアドレス+1に63h('c')を入れるですか?
補足
アセンブラ自体が分かりません。 ソースの5行目がtest.objに 66 A1 04 57 41 00 66 89 45 F8 8A 0D 06 57 41 00 88 4D FA というデータで含まれることになるということですか? 004113CC 8B 45 EC mov eax,dword ptr [str2]は、 "ab"のアドレスをeaxに入れる。 004113CF C6 40 01 63 mov byte ptr [eax+1],63h は、 eaxが指すメモリ、つまり"ab"のアドレスに63h('c')を入れるですか? 便利なソフトですね。でもこのアセンブラを見ると、やってはいけないことをやっているということが分かるんですか?