質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

658閲覧

メモリにファイル内容をすべて取り込んでから使用するには

__ook

総合スコア49

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/01/21 02:58

編集2020/01/21 04:11

メモリにファイル内容をすべて取り込んだのちに使用するにはどうすれば読めるのでしょうか?

c

1int main() 2{ 3 FILE* fp; 4 5 fopen_s(&fp, "file.txt", "rb"); 6 7 fseek(fp, 0L, SEEK_END); 8 9 fpos_t pos; 10 11 fgetpos(fp, &pos); 12 13 fseek(fp, 0L, SEEK_SET); 14 15 char* buf = (char*)malloc(pos + 1); 16 17 memset(buf, 0x00, sizeof(buf)); 18 19 fread(buf, sizeof(char)*pos, 1, fp); 20 21 // 1行ずつ読み取るならどうするべき? 22 23 system("Pause"); 24 25 return 0; 26}

以上から手が止まっています。
CまたはC++の書き方でご教示いただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

C++だとこんな↓かんじ?

C++

1#include <iostream> 2#include <fstream> 3#include <string> 4#include <iterator> 5 6int main() { 7 std::ifstream stream("file.txt"); 8 std::istreambuf_iterator<char> begin(stream), end; 9 std::string buffer(begin, end); // ファイルをまるっと読みこむ 10 std::cout << '[' << buffer << ']' << std::endl; // かくにん 11}

投稿2020/01/21 11:37

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ヒントになればと思い自己流にて作成してみました。(一応メモリに読み込んでいる)

c

1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <fcntl.h> 5#include <sys/stat.h> 6 7//ファイルサイズと行数を取得する 8int GetFileSize(char *file, int *size, int *line) 9{ 10 FILE *fp; 11 int c; 12 *line = *size = 0; 13 14 if ((fp = fopen(file, "r")) == NULL) return 1; 15 while ((c = fgetc(fp)) != EOF) { 16 if (c == '\n') (*line)++; 17 (*size)++; 18 } 19 fclose(fp); 20 return 0; 21} 22 23void main(int argc, char** argv) 24{ 25 int size; 26 int line; 27 int i; 28 29 char* file = argv[1]; 30 printf("debug0 %s \n", file); 31 if (GetFileSize(file, &size, &line)) exit(1); 32 printf ("size:%d line:%d \n",size, line); 33 34 char* buff = (char *)malloc(sizeof(char)*size+1); // ファイル全体メモリ確保 35 memset(buff, 0x00, sizeof(char)*size+1); 36 37 int fd = open(file, O_RDONLY); // ファイルを開く 38 if (fd == -1) exit(1); 39 40 int rc = read(fd, buff, sizeof(char)*size); // サイズ分確保 41 close(fd); // ファイルを閉じる 42 43 const char* kaigyo = "\n"; 44 char** ptr = (char **)malloc(sizeof(char*)*line); // 行分のデータ確保 45 char** p = ptr; 46 *p = strtok(buff, kaigyo); // ファイルを改行で分割 47 while ((*p) != NULL) { 48 p++; 49 *p = strtok(NULL, kaigyo); 50 } 51 52 for(i=0; i<line; i++) printf("%s\n", ptr[i]); // データの利用 53 54 free(buff); // メモリ解放 55 free(ptr); 56}

投稿2020/01/21 05:52

amura

総合スコア333

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

__ook

2020/01/23 00:53

参考にさせていただきました。ありがとうございました。
guest

0

fseek(fp, 0L, SEEK_END);

終端まで移動させたなら、先頭まで戻さないとダメですね

投稿2020/01/21 03:03

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

__ook

2020/01/21 04:13

すみません、修正しました。 質問内容としては、ファイルサイズを取得しメモリ保持、内容取得したものの、アクセスの方法がわからず困っています。
y_waiwai

2020/01/21 04:16

その提示のコードで動かしてみましょう。 で、なにか不具合出たなら言ってきてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問