提示コードの if((const char)data.cFileName != "list_up.txt")* 部ですがCHARをchar*に変換したいのですがどうすればいいのでしょうか?キャストは正直この場合危険と感じましたがどうなのでしょうか?自分は関数なり使ってちゃんと変換したいです。
提示コードは断片的なコードです。規模が大きく載せきれないので必要な部分だけにしました。
int main(){ LPCSTR p = dir; HANDLE h = FindFirstFileA(p,&data); printf("path: %s\n",p); // fscanf_s(file,"%s\n",data.cFileName); int i = 0; char *list[100]; if((const char*)data.cFileName != "list_up.txt") { printf("ああああ\n"); strcat_s(data.cFileName,sizeof(data.cFileName),"\n"); // list[i] = (char*)malloc(sizeof(data.cFileName)); // list[i] = data.cFileName; // printf("%s\n",list[ i ]); i++; //fputs(data.cFileName,file); } i--; return 0; }
質問2の「この関数」はどれのことでしょうか?
提示文章を編集しました。
コンパイルは通るのですか?
(「ja-JP」は、このままだと「jaからJPを引いたもの」と解釈されますが、おそらく意図したものではないでしょうし、jaやJPを宣言していなければコンパイルも不可能です)
むやみに引数の多い関数を使う必要はないということなのでしょうか?またCHARをchar*型変換するための関数は_sprintf_s_lde よろしいのでしょうか?
このままでコンパイルは通るのですか?(2回目)
> むやみに引数の多い関数を使う必要はないということなのでしょうか?
そんなことを主張したつもりはありません。
> CHARからchar*に変換したい
CHARの部分が見当たりませんが。Windowsプログラミングでは、CHARと言う全部大文字のcharをtypedefした型があります。それとも、char c[100]; を指していますか?
> if((const char*)data.cFileName != "list_up.txt")
ご質問と直接関係ありませんが、この部分は合っていますか? 全般的にプログラミングが少し怪しい感じがします。
> この部分は合っていますか?
合っていませんと思っていました。暫定でこうしていましたが早く治すべきです。
また提示コードを一行最初に追加しました。data.cFileName がCHAR型でそれをchar*型と比較できないため(const char*)に変換していました。どうすればいいのでしょうか?自分も定義を探るとchar型みたいですが.....
えっと、dataはどのような型なのでしょうか?(提示されたコード内に宣言がないようです)
その辺りの話になってきますと、Windows APIやC言語関数の話というよりはC言語の文法(ポインター、型)の理解と使い方の話に立ち戻る気がします。C言語/C++でのWindowsプログラミングはただでさえクセがあるので、現状、コードが消化不良のようです。
> (const char*)data.cFileName != "list_up.txt")
> 暫定でこうしていましたが早く治すべきです。
コンパイルエラーを避けるための暫定、の意味だと思いますが、そのif文は必ず「真(true)」になります。つまり、反対に == で評価した場合に同じ文字列扱いになることはありません。( .cFileName メンバーが std::string などでない限り)
※すみません、私のコメントがmaisumakunさんのコメントとやり取りを阻害しているので、以降はコメントを控えます。
この質問は削除予定です。忘れてください。
> この質問は削除予定です。忘れてください。
件名も質問内容も変えてしまわれたので、上記コメントや既にいただいたせっかくの回答も話がつながらなくなってしまっています。件名と質問内容を元に戻し、maisumakunさんの回答をもってBAで閉じれば、質問を削除するほどでは無かったと思うのですけれども。(どうするかはお任せします)
質問内容を意図的に修正してすいませんでした。削除したいのですが削除が許可されていないのでできません。また質問内容を思い出したいのですが
提示コードもろとも覚えていないため修正できません。ご迷惑をおかけします。
> 質問内容を思い出したいのですが提示コードもろとも覚えていないため修正できません。
一応伝えておくと、過去の記載内容は「編集」のリンクから「質問編集履歴」で確認できます。