ファイルの入出力について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ライム

ファイルの入出力について

#1

投稿記事 by ライム » 7年前

はじめまして。
引数としてファイル名を入力して、そのファイルの内容を出力するプログラムを作りたいのですが、このプログラムではファイル名を入れても、ファイルを開いてくれません。10行目が間違っていると思うのですが、どう書いたらいいのか分かりません。
アドバイスよろしくお願いします。
使っているのはC言語です。

コード:

#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]){
  FILE *fp;
  int i;
  char a[256];
  if(argc==1){
	printf("cerror");
	}
  fp = fopen("argv[1]","rt");
  if(NULL==fp){printf("Can not open %s\n",argv[1]);exit(1);}
  while((i=fscanf(fp,"%d", &a[256]))!=EOF){
	printf("%d\n",a[256]);
  }
  fclose(fp);
}

Poco
記事: 161
登録日時: 10年前

Re: ファイルの入出力について

#2

投稿記事 by Poco » 7年前

こちらでコンパイルすらしていませんが、

× fp = fopen("argv[1]","rt");
○ fp = fopen(argv[1],"rt");

かと。
argv[1]という文字列ではなく、argv[1]変数が指している文字列にしないと。

初級者
記事: 200
登録日時: 10年前

Re: ファイルの入出力について

#3

投稿記事 by 初級者 » 7年前

ついでに補足します。
argcが1だったりfpがNULLだったり
していてもそのまま続行するように
なっているのは、とてもまずいと
思います。

アバター
みけCAT
記事: 6351
登録日時: 10年前
住所: 千葉県
連絡を取る:

Re: ファイルの入出力について

#4

投稿記事 by みけCAT » 7年前

a[256]がchar型なのに%dでint型(char型よりサイズが大きいことが多い)の値を代入しようとしており、
しかもa[256]という範囲外の要素にアクセスしているので、かなり危険だと感じます。
オフトピック
厳密に言うと、本当に危険かはコンパイラの実装などに依存し、微妙なところですが・・・
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ライム

Re: ファイルの入出力について

#5

投稿記事 by ライム » 7年前

みなさん、回答ありがとうございます。
Pocoさんのおっしゃった通り訂正すると、開きました。
fpの中身の””は、中に記述される文字列のファイルを開くということなんですね。
よくわかりました。
argcが1だったりfpがNULLだったりする場合には、exit(1)で異常終了するようにしました。
Pocoさん、初級者さん、みけCATさん、ありがとうございました。
これからもお世話になると思いますので、どうぞよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る