質問編集履歴

4

文章とタイトルをできるだけ元の質問に変更しました。

2020/08/28 01:33

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- CHAR型をchar*型に代入なのか全角文字が代入されず英語のみになってしまう原因とは
1
+ CHAR型をchar*型に代入する方法が知りたい。
test CHANGED
@@ -1,190 +1,66 @@
1
- 提示コード最下部の**for**内で確認と書かれた**printf();**関数で出力されるはずの文章がなぜか**sample.txt**になってはなぜなのでしょうか?上のコードのファイルを探す**while()**文やその上の**if()**文ないで普通に表示される**(sampl - コピー(2).txt)**ですがなぜなのでしょうか?
1
+ 提示コードの **if((const char*)data.cFileName != "list_up.txt")** 部ですがCHARをchar*変換のでがどうすばいいのでしょうか?キャスト正直こ場合危険と感じましたどうなのでしょうか?自分は関数なり使ってちゃんと変換したいです。
2
+
3
+
4
+
5
+ 提示コードは断片的なコードです。規模が大きく載せきれないので必要な部分だけにしました。
6
+
7
+
8
+
9
+ ```ここに言語を入力
10
+
11
+
12
+
13
+ int main(){
14
+
15
+ LPCSTR p = dir;
16
+
17
+ HANDLE h = FindFirstFileA(p,&data);
18
+
19
+ printf("path: %s\n",p);
20
+
21
+ // fscanf_s(file,"%s\n",data.cFileName);
22
+
23
+ int i = 0;
24
+
25
+ char *list[100];
26
+
27
+
28
+
29
+ if((const char*)data.cFileName != "list_up.txt")
30
+
31
+ {
2
32
 
3
33
 
4
34
 
5
35
 
6
36
 
7
-
8
-
9
- ![イメージ説明](f82a317f66c0d11dc110ea4aa541641d.png)
37
+ printf("ああああ\n");
10
38
 
11
39
 
12
40
 
13
- ```ここに言語を入力
41
+ strcat_s(data.cFileName,sizeof(data.cFileName),"\n");
14
42
 
15
- int main()
43
+ // list[i] = (char*)malloc(sizeof(data.cFileName));
16
44
 
17
- {
45
+ // list[i] = data.cFileName;
18
46
 
19
- //ワイルドカード
20
-
21
- const char* extension = "*.txt";
22
-
23
- // const char* extension = "*.lib";
47
+ // printf("%s\n",list[ i ]);
24
48
 
25
49
 
26
50
 
27
- LPSTR FullPath;//フルパス
51
+ i++;
28
-
29
- FullPath = (LPSTR)malloc(sizeof(LPSTR) * MAX_PATH);
30
-
31
- DWORD e = GetModuleFileNameA(NULL, FullPath ,MAX_PATH);
32
52
 
33
53
 
34
54
 
35
- char drive[MAX_PATH * 2],dir[MAX_PATH * 3],fname[MAX_PATH * 2],ext[MAX_PATH * 2];
55
+ //fputs(data.cFileName,file);
36
56
 
37
- _splitpath_s((char*)FullPath,drive,
57
+ }
38
58
 
39
- size_t(MAX_PATH * 2),dir,size_t(MAX_PATH * 3),
59
+ i--;
40
-
41
- fname,size_t(MAX_PATH * 2),ext,size_t(MAX_PATH * 2));//パス名を構成要素に分解します
42
60
 
43
61
 
44
62
 
45
- // printf("\n完全パス : %s\n",(char*)FullPath);
46
-
47
- // printf("ドライブ : %s\n",drive);
48
-
49
- // printf("ディレクトリ パス : %s\n",dir);
50
-
51
- // printf("ベース ファイル名 (拡張子なし) : %s\n",fname);
52
-
53
- // printf("ファイル名の拡張子 : %s\n",ext);
54
-
55
-
56
-
57
- //ディレクトリにワイルドカードを付与(パスを作成完了)
58
-
59
- strcat_s(dir,(sizeof(dir)),extension);
60
-
61
-
62
-
63
- // printf("%s\n",dir);
64
-
65
- if(e == ERROR_INSUFFICIENT_BUFFER)
66
-
67
- {
68
-
69
- ErrorConf(e);//エラー表示
70
-
71
- }else
72
-
73
- {
74
-
75
- // printf("正常です。\n");
76
-
77
- }
78
-
79
-
80
-
81
- printf("ファイルをリストアップ\n\n");
82
-
83
-
84
-
85
- FILE *file = NULL;
86
-
87
-
88
-
89
- if(file == NULL)
90
-
91
- {
92
-
93
- printf("あああ");
94
-
95
- }
96
-
97
- WIN32_FIND_DATAA data;
98
-
99
- LPWIN32_FIND_DATAA Next_data = new WIN32_FIND_DATAA();
100
-
101
-
102
-
103
- LPCSTR p = dir;
104
-
105
- HANDLE h = FindFirstFileA(p,&data);
106
-
107
- printf("path: %s\n",p);
108
-
109
-
110
-
111
- int next = 0;
112
-
113
- char *list[100];
114
-
115
- //////////////////////////////////////////////////////////////////////////////////////////////
116
-
117
- if(data.cFileName != "list_up.txt")
118
-
119
- {
120
-
121
- strcat_s(data.cFileName,sizeof(data.cFileName),"\n");
122
-
123
- list[next] = (char*)malloc(sizeof(data.cFileName));
124
-
125
- list[next] = data.cFileName;
126
-
127
- printf("%s",list[ next ]);
128
-
129
-
130
-
131
- next++;
132
-
133
- }
134
-
135
-
136
-
137
- //二つ目以降
138
-
139
- while(FindNextFileA(h,Next_data) != 0)
140
-
141
- {
142
-
143
- strcat_s(Next_data->cFileName,sizeof(Next_data->cFileName),"\n");
144
-
145
- list[next] = (char*)malloc(sizeof(Next_data->cFileName));
146
-
147
- list[next] = Next_data->cFileName;
148
-
149
- printf("%s",list[ next ]);
150
-
151
- next++;
152
-
153
- }
154
-
155
- --next;
156
-
157
-
158
-
159
- fopen_s(&file,"list_up.txt","w");
160
-
161
-
162
-
163
- for(int j = 0; j < next; j++)
164
-
165
- {
166
-
167
- printf("確認: %s",list[j]);
168
-
169
- }
170
-
171
- ///////////////////////////////////////////////////////////////////////////////////////////////
172
-
173
- fclose(file);
174
-
175
- FindClose(h);
176
-
177
- printf("検索終了\n");
178
-
179
-
180
-
181
-
182
-
183
-
184
-
185
- int _c_ = getchar();
186
-
187
- return 0;
63
+ return 0;
188
64
 
189
65
  }
190
66
 

3

文章とタイトルを大幅に編集

2020/08/28 01:33

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- CHARからchar* 変換する方法
1
+ CHAR型をchar*代入したせいなのか全角文字が代入されず英語のみになってしまう原因とは。
test CHANGED
@@ -1,8 +1,4 @@
1
- 質問1、//コメント部のlocalを設定するための文字列とはどういったものなのでしょうか?関数使い方で検索しましたがよくわかりません
2
-
3
-
4
-
5
- 質問2、またタイトル通りCHARからchar*に変換しいのですが_**sprintf_s_l**この関数を使って行うのは正しいのでしょうか?
1
+ 提示コード最下部の**for**内で確認と書かれた**printf();**関数で出力されるはずの文章がなぜか**sample.txt**になってしまいますれはなぜなでしょか?上コードのファイルを探す**while()**文やその上の**if()**文ないで普通に表示される**(sampl - コピー(2).txt)**のですがなぜなのでしょうか?
6
2
 
7
3
 
8
4
 
@@ -10,77 +6,133 @@
10
6
 
11
7
 
12
8
 
13
- 公式リファレンス: https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/sprintf-s-sprintf-s-l-swprintf-s-swprintf-s-l?view=vs-2019
9
+ ![イメージ説明](f82a317f66c0d11dc110ea4aa541641d.png)
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
10
 
25
11
 
26
12
 
27
13
  ```ここに言語を入力
28
14
 
15
+ int main()
16
+
17
+ {
18
+
19
+ //ワイルドカード
20
+
21
+ const char* extension = "*.txt";
22
+
23
+ // const char* extension = "*.lib";
29
24
 
30
25
 
31
26
 
27
+ LPSTR FullPath;//フルパス
28
+
29
+ FullPath = (LPSTR)malloc(sizeof(LPSTR) * MAX_PATH);
30
+
31
+ DWORD e = GetModuleFileNameA(NULL, FullPath ,MAX_PATH);
32
+
33
+
34
+
35
+ char drive[MAX_PATH * 2],dir[MAX_PATH * 3],fname[MAX_PATH * 2],ext[MAX_PATH * 2];
36
+
37
+ _splitpath_s((char*)FullPath,drive,
38
+
39
+ size_t(MAX_PATH * 2),dir,size_t(MAX_PATH * 3),
40
+
41
+ fname,size_t(MAX_PATH * 2),ext,size_t(MAX_PATH * 2));//パス名を構成要素に分解します
42
+
43
+
44
+
45
+ // printf("\n完全パス : %s\n",(char*)FullPath);
46
+
47
+ // printf("ドライブ : %s\n",drive);
48
+
49
+ // printf("ディレクトリ パス : %s\n",dir);
50
+
51
+ // printf("ベース ファイル名 (拡張子なし) : %s\n",fname);
52
+
53
+ // printf("ファイル名の拡張子 : %s\n",ext);
54
+
55
+
56
+
57
+ //ディレクトリにワイルドカードを付与(パスを作成完了)
58
+
59
+ strcat_s(dir,(sizeof(dir)),extension);
60
+
61
+
62
+
63
+ // printf("%s\n",dir);
64
+
65
+ if(e == ERROR_INSUFFICIENT_BUFFER)
66
+
67
+ {
68
+
69
+ ErrorConf(e);//エラー表示
70
+
71
+ }else
72
+
73
+ {
74
+
75
+ // printf("正常です。\n");
76
+
77
+ }
78
+
79
+
80
+
81
+ printf("ファイルをリストアップ\n\n");
82
+
83
+
84
+
85
+ FILE *file = NULL;
86
+
87
+
88
+
89
+ if(file == NULL)
90
+
91
+ {
92
+
93
+ printf("あああ");
94
+
95
+ }
96
+
97
+ WIN32_FIND_DATAA data;
98
+
99
+ LPWIN32_FIND_DATAA Next_data = new WIN32_FIND_DATAA();
100
+
101
+
102
+
103
+ LPCSTR p = dir;
32
104
 
33
105
  HANDLE h = FindFirstFileA(p,&data);
34
106
 
107
+ printf("path: %s\n",p);
35
108
 
36
109
 
37
110
 
111
+ int next = 0;
38
112
 
39
- char *list[100];
113
+ char *list[100];
114
+
115
+ //////////////////////////////////////////////////////////////////////////////////////////////
116
+
117
+ if(data.cFileName != "list_up.txt")
118
+
119
+ {
120
+
121
+ strcat_s(data.cFileName,sizeof(data.cFileName),"\n");
122
+
123
+ list[next] = (char*)malloc(sizeof(data.cFileName));
124
+
125
+ list[next] = data.cFileName;
126
+
127
+ printf("%s",list[ next ]);
40
128
 
41
129
 
42
130
 
43
- char c[100];
44
-
45
- _sprintf_s_l(c,sizeof(c),"%s",_create_locale(LC_ALL,ja-JP));/////////////
46
-
47
-
48
-
49
-
50
-
51
- if((const char*)data.cFileName != "list_up.txt")
52
-
53
- {
54
-
55
- printf("%s\n",data.cFileName);
56
-
57
-
58
-
59
- char t[500];
60
-
61
- wcstombs_s((size_t*)t,t,size_t(data.cFileName),(const wchar_t*)data.cFileName,size_t(50));
62
-
63
-
64
-
65
- printf("%s\n",t);
66
-
67
-
68
-
69
- strcat_s((char*)data.cFileName,sizeof(list[i]) + 50,"\n");
70
-
71
- list[i] = (char*)malloc((sizeof(list[i]) + 50));
72
-
73
- list[i] = (char*)data.cFileName;
74
-
75
- i++;
131
+ next++;
76
-
77
-
78
-
79
- //fputs(data.cFileName,file);
80
132
 
81
133
  }
82
134
 
83
- i--;
135
+
84
136
 
85
137
  //二つ目以降
86
138
 
@@ -88,50 +140,52 @@
88
140
 
89
141
  {
90
142
 
91
-
143
+ strcat_s(Next_data->cFileName,sizeof(Next_data->cFileName),"\n");
92
144
 
93
- if((const char*)Next_data->cFileName != "list_up.txt"){
145
+ list[next] = (char*)malloc(sizeof(Next_data->cFileName));
94
146
 
95
- printf("%s\n",Next_data->cFileName);
147
+ list[next] = Next_data->cFileName;
96
148
 
97
- printf("ああああ\n");
149
+ printf("%s",list[ next ]);
150
+
151
+ next++;
152
+
153
+ }
154
+
155
+ --next;
156
+
157
+
158
+
159
+ fopen_s(&file,"list_up.txt","w");
98
160
 
99
161
 
100
162
 
101
- strcat_s((char*)Next_data->cFileName,sizeof(list[i]) + 50,"\n");
163
+ for(int j = 0; j < next; j++)
102
164
 
103
- list[i] = (char*)malloc(sizeof(list[i]) + 50);
165
+ {
104
166
 
105
- list[i] = (char*)Next_data->cFileName;
167
+ printf("確認: %s",list[j]);
106
-
107
- i++;
108
-
109
-
110
-
111
- //fputs(Next_data->cFileName,file);
112
-
113
- }
114
168
 
115
169
  }
170
+
171
+ ///////////////////////////////////////////////////////////////////////////////////////////////
172
+
173
+ fclose(file);
174
+
175
+ FindClose(h);
176
+
177
+ printf("検索終了\n");
178
+
179
+
116
180
 
117
181
 
118
182
 
119
183
 
120
184
 
185
+ int _c_ = getchar();
121
186
 
187
+ return 0;
122
188
 
123
- //printf("%s\n",list[0]);
124
-
125
-
126
-
127
- for(int j =0; j< i -1; j++)
128
-
129
- {
130
-
131
- printf("%s\n",list[j]);
132
-
133
- }
189
+ }
134
-
135
-
136
190
 
137
191
  ```

2

文章を編集しました。

2020/08/28 00:18

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -25,6 +25,16 @@
25
25
 
26
26
 
27
27
  ```ここに言語を入力
28
+
29
+
30
+
31
+
32
+
33
+ HANDLE h = FindFirstFileA(p,&data);
34
+
35
+
36
+
37
+
28
38
 
29
39
  char *list[100];
30
40
 

1

指摘通り文章を編集しました。

2020/08/27 23:43

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 質問2、またタイトル通りCHARからchar*に変換したいのですがこの関数を使って行うのは正しいのでしょうか?
5
+ 質問2、またタイトル通りCHARからchar*に変換したいのですが_**sprintf_s_l**この関数を使って行うのは正しいのでしょうか?
6
6
 
7
7
 
8
8