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関数以外ではコマンドライン引数取って来れないのかな??
参照