teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

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

2020/08/28 01:33

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- CHAR型をchar*型に代入なのか全角文字が代入されず英語のみになってしまう原因とは
1
+ CHAR型をchar*型に代入する方法が知りたい。
body CHANGED
@@ -1,96 +1,34 @@
1
- 提示コード最下部の**for文**内で確認と書かれた**printf();**関数出力されるはずの文章なぜか**sample.txt**なってはなぜなのでしょうか?上のコードのファイルを探す**while()**文やその上の**if()**文ないで普通に表示される**(sampl - コピー(2).txt)**ですがなぜなのでしょうか?
1
+ 提示コードの **if((const char*)data.cFileName != "list_up.txt")** 部CHARをchar*に変換のでがどうすばいいのでしょうか?キャスト正直こ場合危険と感じましたどうなのでしょうか?自分は関数なり使ってちゃんと変換したいです。
2
2
 
3
+ 提示コードは断片的なコードです。規模が大きく載せきれないので必要な部分だけにしました。
3
4
 
4
-
5
- ![イメージ説明](f82a317f66c0d11dc110ea4aa541641d.png)
6
-
7
5
  ```ここに言語を入力
8
- int main()
9
- {
10
- //ワイルドカード
11
- const char* extension = "*.txt";
12
- // const char* extension = "*.lib";
13
6
 
7
+ int main(){
14
- LPSTR FullPath;//フルパス
8
+ LPCSTR p = dir;
15
- FullPath = (LPSTR)malloc(sizeof(LPSTR) * MAX_PATH);
16
- DWORD e = GetModuleFileNameA(NULL, FullPath ,MAX_PATH);
9
+ HANDLE h = FindFirstFileA(p,&data);
10
+ printf("path: %s\n",p);
11
+ // fscanf_s(file,"%s\n",data.cFileName);
12
+ int i = 0;
13
+ char *list[100];
17
14
 
18
- char drive[MAX_PATH * 2],dir[MAX_PATH * 3],fname[MAX_PATH * 2],ext[MAX_PATH * 2];
19
- _splitpath_s((char*)FullPath,drive,
20
- size_t(MAX_PATH * 2),dir,size_t(MAX_PATH * 3),
21
- fname,size_t(MAX_PATH * 2),ext,size_t(MAX_PATH * 2));//パス名を構成要素に分解します
22
-
23
- // printf("\n完全パス : %s\n",(char*)FullPath);
15
+ if((const char*)data.cFileName != "list_up.txt")
24
- // printf("ドライブ : %s\n",drive);
25
- // printf("ディレクトリ パス : %s\n",dir);
26
- // printf("ベース ファイル名 (拡張子なし) : %s\n",fname);
27
- // printf("ファイル名の拡張子 : %s\n",ext);
28
-
29
- //ディレクトリにワイルドカードを付与(パスを作成完了)
30
- strcat_s(dir,(sizeof(dir)),extension);
31
-
32
- // printf("%s\n",dir);
33
- if(e == ERROR_INSUFFICIENT_BUFFER)
34
- {
35
- ErrorConf(e);//エラー表示
36
- }else
37
16
  {
38
- // printf("正常です。\n");
39
- }
40
17
 
41
- printf("ファイルをリストアップ\n\n");
42
18
 
43
- FILE *file = NULL;
19
+ printf("ああああ\n");
44
20
 
45
- if(file == NULL)
46
- {
47
- printf("あああ");
48
- }
49
- WIN32_FIND_DATAA data;
50
- LPWIN32_FIND_DATAA Next_data = new WIN32_FIND_DATAA();
51
-
52
- LPCSTR p = dir;
53
- HANDLE h = FindFirstFileA(p,&data);
54
- printf("path: %s\n",p);
55
-
56
- int next = 0;
57
- char *list[100];
58
- //////////////////////////////////////////////////////////////////////////////////////////////
59
- if(data.cFileName != "list_up.txt")
60
- {
61
21
  strcat_s(data.cFileName,sizeof(data.cFileName),"\n");
62
- list[next] = (char*)malloc(sizeof(data.cFileName));
22
+ // list[i] = (char*)malloc(sizeof(data.cFileName));
63
- list[next] = data.cFileName;
23
+ // list[i] = data.cFileName;
64
- printf("%s",list[ next ]);
24
+ // printf("%s\n",list[ i ]);
65
25
 
66
- next++;
26
+ i++;
67
- }
68
27
 
69
- //二つ目以降
70
- while(FindNextFileA(h,Next_data) != 0)
71
- {
72
- strcat_s(Next_data->cFileName,sizeof(Next_data->cFileName),"\n");
73
- list[next] = (char*)malloc(sizeof(Next_data->cFileName));
74
- list[next] = Next_data->cFileName;
28
+ //fputs(data.cFileName,file);
75
- printf("%s",list[ next ]);
76
- next++;
77
29
  }
78
- --next;
30
+ i--;
79
-
80
- fopen_s(&file,"list_up.txt","w");
81
31
 
82
- for(int j = 0; j < next; j++)
83
- {
84
- printf("確認: %s",list[j]);
85
- }
86
- ///////////////////////////////////////////////////////////////////////////////////////////////
87
- fclose(file);
88
- FindClose(h);
89
- printf("検索終了\n");
90
-
91
-
92
-
93
- int _c_ = getchar();
94
- return 0;
32
+ return 0;
95
33
  }
96
34
  ```

3

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

2020/08/28 01:33

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- CHARからchar* 変換する方法
1
+ CHAR型をchar*代入したせいなのか全角文字が代入されず英語のみになってしまう原因とは。
body CHANGED
@@ -1,69 +1,96 @@
1
- 質問1、//メント部のlocalを設定するための字列はどういっのなのでしょうか?関数使検索しましたよくわりません
1
+ 提示ード最下部の**for**内で確認書かれ**printf();**関数で出力されるはず文章がぜか**sample.txt**になってしまいますこれはなぜなのでしょうか?上のコードのファイルを探す**while()**文やその上の**if()**文ないでは普通に表示される**(sampl - コピー(2).txt)**のですなぜなのでしょう
2
2
 
3
- 質問2、またタイトル通りCHARからchar*に変換したいのですが_**sprintf_s_l**この関数を使って行うのは正しいのでしょうか?
4
3
 
5
4
 
5
+ ![イメージ説明](f82a317f66c0d11dc110ea4aa541641d.png)
6
6
 
7
+ ```ここに言語を入力
8
+ int main()
9
+ {
10
+ //ワイルドカード
11
+ const char* extension = "*.txt";
7
- 公式リファレンス: https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/sprintf-s-sprintf-s-l-swprintf-s-swprintf-s-l?view=vs-2019
12
+ // const char* extension = "*.lib";
8
13
 
14
+ LPSTR FullPath;//フルパス
15
+ FullPath = (LPSTR)malloc(sizeof(LPSTR) * MAX_PATH);
16
+ DWORD e = GetModuleFileNameA(NULL, FullPath ,MAX_PATH);
9
17
 
18
+ char drive[MAX_PATH * 2],dir[MAX_PATH * 3],fname[MAX_PATH * 2],ext[MAX_PATH * 2];
19
+ _splitpath_s((char*)FullPath,drive,
20
+ size_t(MAX_PATH * 2),dir,size_t(MAX_PATH * 3),
21
+ fname,size_t(MAX_PATH * 2),ext,size_t(MAX_PATH * 2));//パス名を構成要素に分解します
10
22
 
23
+ // printf("\n完全パス : %s\n",(char*)FullPath);
24
+ // printf("ドライブ : %s\n",drive);
25
+ // printf("ディレクトリ パス : %s\n",dir);
26
+ // printf("ベース ファイル名 (拡張子なし) : %s\n",fname);
27
+ // printf("ファイル名の拡張子 : %s\n",ext);
11
28
 
29
+ //ディレクトリにワイルドカードを付与(パスを作成完了)
30
+ strcat_s(dir,(sizeof(dir)),extension);
12
31
 
32
+ // printf("%s\n",dir);
33
+ if(e == ERROR_INSUFFICIENT_BUFFER)
34
+ {
35
+ ErrorConf(e);//エラー表示
36
+ }else
37
+ {
38
+ // printf("正常です。\n");
39
+ }
13
40
 
14
- ```ここに言語入力
41
+ printf("ファイルリストアップ\n\n");
15
42
 
43
+ FILE *file = NULL;
16
44
 
17
- HANDLE h = FindFirstFileA(p,&data);
18
-
19
-
20
- char *list[100];
45
+ if(file == NULL)
21
-
22
- char c[100];
23
- _sprintf_s_l(c,sizeof(c),"%s",_create_locale(LC_ALL,ja-JP));/////////////
24
-
25
-
26
- if((const char*)data.cFileName != "list_up.txt")
27
46
  {
28
- printf("%s\n",data.cFileName);
47
+ printf("あああ");
48
+ }
49
+ WIN32_FIND_DATAA data;
50
+ LPWIN32_FIND_DATAA Next_data = new WIN32_FIND_DATAA();
29
51
 
30
- char t[500];
52
+ LPCSTR p = dir;
31
- wcstombs_s((size_t*)t,t,size_t(data.cFileName),(const wchar_t*)data.cFileName,size_t(50));
53
+ HANDLE h = FindFirstFileA(p,&data);
54
+ printf("path: %s\n",p);
32
55
 
56
+ int next = 0;
57
+ char *list[100];
58
+ //////////////////////////////////////////////////////////////////////////////////////////////
59
+ if(data.cFileName != "list_up.txt")
60
+ {
61
+ strcat_s(data.cFileName,sizeof(data.cFileName),"\n");
62
+ list[next] = (char*)malloc(sizeof(data.cFileName));
63
+ list[next] = data.cFileName;
33
- printf("%s\n",t);
64
+ printf("%s",list[ next ]);
34
65
 
35
- strcat_s((char*)data.cFileName,sizeof(list[i]) + 50,"\n");
36
- list[i] = (char*)malloc((sizeof(list[i]) + 50));
37
- list[i] = (char*)data.cFileName;
38
- i++;
66
+ next++;
67
+ }
39
68
 
40
- //fputs(data.cFileName,file);
41
- }
42
- i--;
43
69
  //二つ目以降
44
70
  while(FindNextFileA(h,Next_data) != 0)
45
71
  {
46
-
47
- if((const char*)Next_data->cFileName != "list_up.txt"){
48
- printf("%s\n",Next_data->cFileName);
49
- printf("ああああ\n");
50
-
51
- strcat_s((char*)Next_data->cFileName,sizeof(list[i]) + 50,"\n");
72
+ strcat_s(Next_data->cFileName,sizeof(Next_data->cFileName),"\n");
52
- list[i] = (char*)malloc(sizeof(list[i]) + 50);
73
+ list[next] = (char*)malloc(sizeof(Next_data->cFileName));
53
- list[i] = (char*)Next_data->cFileName;
74
+ list[next] = Next_data->cFileName;
75
+ printf("%s",list[ next ]);
54
- i++;
76
+ next++;
55
-
56
- //fputs(Next_data->cFileName,file);
57
- }
58
77
  }
78
+ --next;
79
+
80
+ fopen_s(&file,"list_up.txt","w");
59
81
 
60
-
61
-
62
- //printf("%s\n",list[0]);
63
-
64
- for(int j =0; j< i -1; j++)
82
+ for(int j = 0; j < next; j++)
65
83
  {
66
- printf("%s\n",list[j]);
84
+ printf("確認: %s",list[j]);
67
85
  }
86
+ ///////////////////////////////////////////////////////////////////////////////////////////////
87
+ fclose(file);
88
+ FindClose(h);
89
+ printf("検索終了\n");
90
+
68
91
 
92
+
93
+ int _c_ = getchar();
94
+ return 0;
95
+ }
69
96
  ```

2

文章を編集しました。

2020/08/28 00:18

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -12,6 +12,11 @@
12
12
 
13
13
 
14
14
  ```ここに言語を入力
15
+
16
+
17
+ HANDLE h = FindFirstFileA(p,&data);
18
+
19
+
15
20
  char *list[100];
16
21
 
17
22
  char c[100];

1

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

2020/08/27 23:43

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  質問1、//コメント部のlocalを設定するための文字列とはどういったものなのでしょうか?関数使い方で検索しましたがよくわかりません
2
2
 
3
- 質問2、またタイトル通りCHARからchar*に変換したいのですがこの関数を使って行うのは正しいのでしょうか?
3
+ 質問2、またタイトル通りCHARからchar*に変換したいのですが_**sprintf_s_l**この関数を使って行うのは正しいのでしょうか?
4
4
 
5
5
 
6
6