how to use fets

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

how to use fets

#1

投稿記事 by ファイブマン » 13年前

fgetsを使って,テキストファイルの中身を読み込み,それを使いたいのですが,
いろいろとエラーが出てしまいます.
このプログラムはコマンドラインの引数1にテキストファイルの名前を入力してその中身を呼び出すのですが,
(例:%
./program "text.txt"

それを開いた上で,このままだとbufには"text.txt"の1行目しか入っていないことになるのでしょうか.
行目のputs(buf);では全ての内容が出てくるのですが,その後strstrを使ってその中の文字列を検索するとテキストの1行目からしか検索してないようになっています.(buf1は出力される)
buf2まで出力するにはどこを変更すればいいのでしょうか.

それと,これと関係あるかわからないのですが,その出力の後,必ずセグメントエラーが出てしまいます.この理由がわかりません.

以上のことがわかりませんでした.よろしければ回答お願いします.

コード:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <netdb.h>
#include <unistd.h>

#define SERVER_NAME "zenith.edu.ics.saitama-u.ac.jp"
#define ERR -1
#define BUFSIZE 1024
#define MAX_LEN 256     /* 1行の最大文字数 -1 */

char *command_name;

int main(int argc, char* argv[]){
  FILE *fp;
  char buf[BUFSIZE];
  char * buf1, *buf2;
  if ((command_name = rindex(argv[0], '/')) != NULL)
    command_name++;
  else
    command_name = argv[0]; 
  
  
  fp=fopen(argv[1], "r");
  while ((fgets(buf, MAX_LEN - 1, fp)) != NULL) {
    buf[strlen(buf) - 1] = '\0';     /* 余分な改行コードを削除 */
    //puts(buf);                          /*読み込んだ行を表示 */
    buf1 = strstr(buf,"ject"); 
    buf2 = strstr(buf,"Mon");
    printf("%s\n", buf1); 
    printf("%s\n", buf2);
    
}
  fclose(fp);
  
  return 0;
}
テキストファイルの中身

コード:

Subject: uaoh
From: mail.co.jp
To: mail2.co.jp
Date: Mon Jan 2012

ohre

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

Re: how to use fets

#2

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

実際に実行はしていませんが、
まず一行目を読み込んだ時、Monは含まれていないのでbuf2にはNULLが格納されます。
このNULLが格納されたbuf2をprintfで表示しようとしているので、アクセス違反で落ちていると思われます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ファイブマン

Re: how to use fets

#3

投稿記事 by ファイブマン » 13年前

みけCAT さんが書きました:実際に実行はしていませんが、
まず一行目を読み込んだ時、Monは含まれていないのでbuf2にはNULLが格納されます。
このNULLが格納されたbuf2をprintfで表示しようとしているので、アクセス違反で落ちていると思われます。
回答ありがとうございます.みけCATさんの回答から,
whileループが終わる前に

コード:

if(buf2 != NULL)
      break;
をつけて,NULLで逃げられないようにすればMonが見つけられると気づきました.

問題,解決しました.
ありがとうございます.

閉鎖

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