回答編集履歴

3

mbstowcs を使うコードを追加

2021/05/21 04:20

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -41,3 +41,67 @@
41
41
  **追記**
42
42
 
43
43
  `= { L'\0' }` で初期化しているから、`txt[i] = L'\0';` の行は不要でした。
44
+
45
+
46
+
47
+ **追記2**
48
+
49
+ 文字列を変換したいのに、文字変換の mbrtowc を使うのは面倒です。
50
+
51
+ mbstowcs を使えば次のようになります。
52
+
53
+ ```C++
54
+
55
+ #include <iostream> // wcout, endl
56
+
57
+ #include <cstdlib> // mbstowcs
58
+
59
+ #include <clocale> // setlocale
60
+
61
+ using namespace std;
62
+
63
+
64
+
65
+ int main()
66
+
67
+ {
68
+
69
+ setlocale(LC_CTYPE, "");
70
+
71
+ const char text[] = "テストtest";
72
+
73
+ wchar_t txt[20];
74
+
75
+ int n = mbstowcs(txt, text, 20);
76
+
77
+ wcout << n << endl;
78
+
79
+ for (int i = 0; txt[i]; i++)
80
+
81
+ wcout << txt[i] << " " << hex << int(txt[i]) << endl;
82
+
83
+ }
84
+
85
+ ```
86
+
87
+ 実行結果
88
+
89
+ ```text
90
+
91
+ 7
92
+
93
+ テ 30c6
94
+
95
+ ス 30b9
96
+
97
+ ト 30c8
98
+
99
+ t 74
100
+
101
+ e 65
102
+
103
+ s 73
104
+
105
+ t 74
106
+
107
+ ```

2

追記

2021/05/21 04:20

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -37,3 +37,7 @@
37
37
  }
38
38
 
39
39
  ```
40
+
41
+ **追記**
42
+
43
+ `= { L'\0' }` で初期化しているから、`txt[i] = L'\0';` の行は不要でした。

1

コードの修正

2021/05/19 17:42

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  txt[i] = L'\0';
32
32
 
33
- for (int i = 0; txt[i] != L'\0'; i++)
33
+ for (i = 0; txt[i] != L'\0'; i++)
34
34
 
35
35
  std::wcout << txt[i] << std::endl;
36
36