C言語でテキストファイルを読み込みたい時


C言語でテキストファイル読み込みたい!と思っててきとうに書いたらエラージゴックになってようやくエラーなくなったのでまとめときます。
備忘録備忘録だいじね。

C言語でのコマンドライン引数の取り方

#include <stdio.h>
#include <stdlib.h> //exitを定義?

int main(int argc, char *argv[]) { 
// int argcは引数の個数 char *argv[]は引数の文字列を指すポインタ型配列
// printf("引数の個数は%d個です。\n", argc-1);
// こんな感じで引数の個数わかります
//printf("%s\n", argv[1]);
//これでファイル名が拾えます

  FILE *file;
  char buffer[1000];

  if(argc!=2){
    printf("コマンドの後に1つファイルを指定してください。\n");
    printf("使用法: ./output_file <ファイル名>\n");
    exit(1);
  }

  if ((file = fopen(argv[1], "r"))==NULL) {
    printf("ファイルを開くのに失敗しました\n");
    exit(1);
  }
  printf("--------\n");
  while((fgets(buffer, 100, file))!=NULL) {
    printf("%s", buffer);
  }
  printf("\n");

  fclose(file);

  return 0;
}

C言語はやっぱレガシー感やばいですね。
ファイルの中身とってくるのに資料調べながら1時間くらいかかってしまいました...w

argv[0]にそもそも実行コマンド名が入ってきてうおおっっ!!てなってしまったんですが、自分だけですか?普通配列一番目は対称引数の1番目じゃないんですか!?と...

FILE型はサイズや位置などの様々な情報が入った構造体です。構造体は変数の集まりみたいなものですね。

fopen()で開く事によって、構造体へのポインタを返してくれます。なので上記のファイルではFILE型ポインタ変数?(合ってるのか?)に代入して取り扱ってます。
なのでアドレスとかは再代入で変えないようにしましょうね!

C言語ではファイルを開いた状態(ストリームといいます)にしてから、その中の情報にアクセスします。

fgets()関数は文字列1列ずつを文字列ポインタとして返してくれます。
この関数ですが、文字列をブチ込むポインタ、格納する文字列のバイト数(たぶん)、ストリームポインタの3つを引数に取る関数なのでまたこれが使いにくいです。


fgets関数に関しては参照に貼ったリンク先で詳細が説明されています。

テキストファイル読み込んだ結果、成功です。
かしこまっ!

ポインタにやっと慣れ親しめてきたかな?もっとガシガシ書いて体にしみ込ませよう

そういやmain関数以外ではコマンドライン引数取って来れないのかな??

参照