
No.4ベストアンサー
- 回答日時:
改行を\0に置き換えながらその次のアドレスをchar*に入れていく
これは
char** line = malloc(sizeof(char*) * line_count);
line[0] = strtok( buf, "\n" );
for (i = 1; i < line_count; i++) {
line[i] = strtok( NULL, "\n" );
}
でできそうですね
bufはファイル全部を読み込んだポインタでline_countはbufをサーチして数えた行数(\nの数)です。
bufの最後には0が必要ですのでメモリ確保時に1バイト余分に確保して最後に0を代入すればいいでしょう。
No.5
- 回答日時:
ファイルからfgetsで1行ずつ読みながらリストに追加していく方法がシンプルではないでしょうか。
こんな感じ?(サンプルですので動作保証しません)
/* ファイルから読んだ文字列をリストに入れる */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
struct node* next; /* 次のデータへのポインタ */
char *record; /* データ内容 */
};
/* リストの最後にデータを付加する */
void addlist(struct node *p, char *s) {
struct node *pp;
while (p->next != NULL) p=p->next; /* 最後のノードを探す */
pp=(struct node*)malloc(sizeof(struct node)); /* 新しいノード */
if (pp==NULL) {
printf("pp malloc error\n"); return;
}
pp->record=(char*)malloc(strlen(s)+1); /* 新しいデータ */
if (pp->record==NULL) {
printf("record malloc error\n"); return;
}
strcpy(pp->record, s); /* データの内容をコピー */
pp->next=p->next; p->next=pp; /* リストに挿入 */
}
/* リストの内容を表示 */
void printlist(struct node *p) {
while ((p=p->next)!=NULL) {
printf("%s",p->record);
}
}
/* リストを全部消す */
void rmlist(struct node *p) {
struct node *pp=p->next;
p->next=NULL; /* rootはmallocしてないのでfreeしないでNULL入れる */
while (pp!=NULL) {
p=pp;
pp=pp->next;
free(p->record); free(p); /* mallocした領域を開放 */
}
}
int main(int argc, char **argv) {
struct node root={NULL,""};
FILE *fp;
char buf[256];
/* コマンドラインからファイル名取得して開く */
if (argc!=2) return -1;
if ((fp=fopen(argv[1],"r"))==NULL) {
printf("%s open error\n",argv[1]); return -1;
}
/* 全文を読みながらリストに追加 */
while(fgets(buf, sizeof(buf),fp)!=NULL) {
addlist(&root,buf);
}
/* ファイルを閉じる */
fclose(fp);
/* リストを表示 */
printlist(&root);
/* リストを消す */
rmlist(&root);
return 0;
}

No.3
- 回答日時:
こんにちは。
linux系だとfstatでファイルサイズが取れますが環境が解らないので
stdio.h の範囲内で、こんな感じでどうでしょうか?
/* ファイルオープン (fopen) */
/* ファイル最後に移動 (fseek) */
/* ファイルサイズを取得 (ftell) */
/* ファイル先頭に戻す (fseek) */
/* ファイルサイズ分の配列を確保 */
/* ファイル読み込み (fread) */
/* ファイルクローズ (fclose) */
ご参考までに。
No.2
- 回答日時:
>fgetsですと最後の1行しか取れませんし・・
間違い。
ひょっとしたらそんな仕様のコンパイラもあるのかもしれませんが
通常、1バイト目から取りにいきます。
最悪、fseekで強制的に読み取り位置を変えてやればいいかと。
fgetsは指定したバイト数だけ引っ張ってきます。
ひょっとして、リードバッファをずっと同じものを使っているから
ループから抜けたときに最終行を保持してるのではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- フリーソフト Windowsの特殊文字を削除や変換したい そんなフリーソフトはありますか? 3 2022/11/09 00:05
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
なぜCSQとCIP形式ではコ...
-
ファイルの作成・書き込み・読...
-
簡易grep関数ができません。助...
-
数値のみ抽出(C言語)
-
ファイルの読み込みでエラー?
-
セグメンテーションエラーの原...
-
ファイルを読み込んだ時に同じ...
-
大量の入力ファイルを扱うとき...
-
ガンマ変換 C言語でプログラ...
-
c言語でのfscanfについて
-
エラーがわかりません、、
-
fopenでファイル名に、変数を使...
-
ファイルが読み込めない・・・
-
漢字を配列に入れたいのですが
-
構造体の各メンバにfor文からア...
-
「Aに対するBの割合」と「Aに対...
-
Enterキーを押されたら次の処理...
-
C言語での引数の省略方法
-
ラグランジュの補間法のCプログ...
-
10個出力で改行したいのですが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
c言語でのfscanfについて
-
ファイルへの書込み処理が異常...
-
ファイル出力で改行を入れたい!
-
fscanfでループしてしまう。
-
C言語にてXMLファイルから任意...
-
テキストファイル内に対して, ...
-
datファイルの読み込み
-
ファイルに行番号を追加
-
大量の入力ファイルを扱うとき...
-
辞書順にソートしたいのですが...
-
InternetReadFileを使ったファ...
-
C言語 連番データの読み込み
-
C言語におけるファイル読み込み...
-
数値のみ抽出(C言語)
-
簡易grep関数ができません。助...
-
VisualStudioでのファイルの入...
-
fgets( ) の返り値は何?
おすすめ情報