fgetsについて – プログラミング – Home

通知
すべてクリア

[解決済] fgetsについて


コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

本当に何度もすみません...。申し訳ないです...。

以前から書いていた読み込みコードの文字取得方法を
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内に取ってきた文字列を
代入したいのですが...。

}
}


引用未解決
トピックタグ
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

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); // とかできます


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

ポインタとメモリ領域について勉強してみるといいと思います。
この場合行うのは代入ではなくコピーです。

char配列で、終端が\0であればstrcpy、若しくはsprintfでOKです。
\0で終端していなければmemcpy等を使用します。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

ごめんなさい、語弊がありますね。
配列の1つ1つを見れば代入したっていい訳だし。

あと、こんなのもありますね。文字長のオーバーフローが怖いですが。

while (fgets(mCsvData[j++], 50, fpc) != NULL) ;


返信引用
コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

Bun様、PAI様、度重なるアドバイス、本当にありがとうございます。
質問のタイトルが的を得ていなくて申し訳ありませんでした。

PAI様が仰る通り、ポインタについてまだまだ勉強不足です。
(全体的にまだ勉強ができてないとも言えるのですが...。)

今回の場合、
//c_systpndataファイル読み込み
while (fgets(Line, 100, fpc) != NULL)
{
//配列に格納
sprintf(mCsvData[j++], %s, Line);
}
というコードで実現ができました。
Bun様からの、「wsprintf」は「関数 'wsprintf' は定義されていません。」
とエラーが出てきてしまったのですが、何かインクルードしてこないと使えない
関数なのでしょうか?
MSDNで検索してみたのですが、「wsprintf」自体が検索できませんでしたので...。
もしよろしければ、併せてアドバイスをお願いできませんでしょうか?


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>MSDNで検索してみたのですが、「wsprintf」自体が検索できませんでしたので...。

そういえば、環境がかかれていませんね。
私はVC6.0です。

PAIさんが紹介されている sprintf はいかがでしょうか。
------------------------------------------------------
MSDNによると wsprintf は

ヘッダ : winuser.h 内で宣言
インポート ライブラリ : user32.lib を使用

となっています。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>PAIさんが紹介されている sprintf はいかがでしょうか。

失礼しました。使われていましたね。(^^; m(__)m

wsprintfもsprintfも似たよーなもんです。


返信引用
コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

Bun様、ありがとうございました。
大変参考になりました!

また、バージョンの記入漏れ、大変失礼致しました。
私のバージョンは6.0です。

wsprintfは何故か検索しても出てきませんでした。
検索の仕方が悪かったのでしょうか...。

何はともあれ、皆様のご好意に感謝いたします。
本当にありがとうございました!


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

wsprintfはプラットフォームSDKってところに入ってると思いますよ。
マイクロソフト製関数ですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました