本当に何度もすみません...。申し訳ないです...。
以前から書いていた読み込みコードの文字取得方法を
fgetcからfgetsに変更したいのですが、どうしても上手くいきません。
ヘルプやMSDNをみたのですが、多次元配列への格納がうまくいかずに
困っています。
もっと自分で調べられれば良いのですが行き詰まってしまいました。
皆様のご好意に甘えるのはこれを最後にしたいと思います。
おそらく簡単なことだと思うのですが、どうかアドバイスをお願いいたします。
/*CSVファイル読み込み関数*/
void CsvOpen(char *cFileAdress)
{
FILE *fpc;
int j=0;
int iCsv;
char Line[100];
char mCsvData[3500][50];←添字はおおよそです。
/*total.csvファイルを開く*/
fpc=fopen(cFileAdress,r);
/*c_systpndataファイル読み込み*/
while (fgets(Line, 100, fpc) != NULL)
{
mCsvData[j++][50] = Line;
↑この「[50]」の部分に変数Line内に取ってきた文字列を
代入したいのですが...。
}
}
fgetsについての質問ではないですよね。
wsprintfで文字列をコピーできます。
受け側が2次元配列なら、例えばこんなかんじ。
char dbuf[10][10];
char sbuf[] = abced;
ZeroMemory(&buf[0][0], 100); // ゼロクリア
wsprintf(dbuf[0], %s, sbuf); // とか
wsprintf(&dbuf[1][0], %s, sbuf); // とかできます
ポインタとメモリ領域について勉強してみるといいと思います。
この場合行うのは代入ではなくコピーです。
char配列で、終端が\0であればstrcpy、若しくはsprintfでOKです。
\0で終端していなければmemcpy等を使用します。
ごめんなさい、語弊がありますね。
配列の1つ1つを見れば代入したっていい訳だし。
あと、こんなのもありますね。文字長のオーバーフローが怖いですが。
while (fgets(mCsvData[j++], 50, fpc) != NULL) ;
Bun様、PAI様、度重なるアドバイス、本当にありがとうございます。
質問のタイトルが的を得ていなくて申し訳ありませんでした。
PAI様が仰る通り、ポインタについてまだまだ勉強不足です。
(全体的にまだ勉強ができてないとも言えるのですが...。)
今回の場合、
//c_systpndataファイル読み込み
while (fgets(Line, 100, fpc) != NULL)
{
//配列に格納
sprintf(mCsvData[j++], %s, Line);
}
というコードで実現ができました。
Bun様からの、「wsprintf」は「関数 'wsprintf' は定義されていません。」
とエラーが出てきてしまったのですが、何かインクルードしてこないと使えない
関数なのでしょうか?
MSDNで検索してみたのですが、「wsprintf」自体が検索できませんでしたので...。
もしよろしければ、併せてアドバイスをお願いできませんでしょうか?
>MSDNで検索してみたのですが、「wsprintf」自体が検索できませんでしたので...。
そういえば、環境がかかれていませんね。
私はVC6.0です。
PAIさんが紹介されている sprintf はいかがでしょうか。
------------------------------------------------------
MSDNによると wsprintf は
ヘッダ : winuser.h 内で宣言
インポート ライブラリ : user32.lib を使用
となっています。
>PAIさんが紹介されている sprintf はいかがでしょうか。
失礼しました。使われていましたね。(^^; m(__)m
wsprintfもsprintfも似たよーなもんです。
Bun様、ありがとうございました。
大変参考になりました!
また、バージョンの記入漏れ、大変失礼致しました。
私のバージョンは6.0です。
wsprintfは何故か検索しても出てきませんでした。
検索の仕方が悪かったのでしょうか...。
何はともあれ、皆様のご好意に感謝いたします。
本当にありがとうございました!
wsprintfはプラットフォームSDKってところに入ってると思いますよ。
マイクロソフト製関数ですね。