テキストファイルの文字列を一行づつ読み出すには?

解決


はじめの一歩  2004-04-19 23:55:47  No: 53506

初心者でみません。
指定したテキストファイルの20行の文字列を
一行づつ読み出したいのですが、
テキストファイルを開くところからわかりません。
誰か教えていただけないでしょうか?


Toshi  2004-04-20 00:14:13  No: 53507

Cベースなら
http://www9.plala.or.jp/sgwr-t/

C++ベースなら
http://www.kumei.ne.jp/c_lang/index_cp.html


たく  2004-04-20 03:15:28  No: 53508

Toshiさん、
「ねこ」のC編には、なにか問題があるのでしょうか?
と聞いてみる・・・


Toshi  2004-04-20 06:59:26  No: 53509

いや、猫のCはWindows-GUI周りの入門には最適だと思うんですが、
単純なファイルリードってーとVCとかWindowsよりも「C言語入門」
かなと・・・


はじめの一歩  2004-05-07 23:08:00  No: 53510

引き続きお願いします

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
  FILE *fp;
  char moji[256];
  char fukusya[10];
  int i;

  if ((fp = fopen("c:\\test.txt", "r")) == NULL) {
    printf("file open error!!\n");
    exit(1);
  }
  
  while (fgets(moji, 256, fp) != NULL) {
    
  
    printf("%s", moji);
    printf("%d\n",strlen(moji));
    if (strlen(moji) > 9 ) {
      strncpy(fukusya,moji,8);
      printf("%s",fukusya);  
    }
    else {
       strcpy(fukusya,moji);
      printf("%s",fukusya);  
    }
    
    i =  strlen(fukusya); 
    
    printf("%d\n",i);  

  }
  fclose(fp);
  
  return 0;
}

一行づつ読み出し、別の文字列にコピーする処理をしたいと思っています。
読み出してきた文字列が9文字より多い場合、最初から8文字だけコピーし、9文字目に改行コードを挿入したいのですが、実行すると9文字以上の時、文字列fukusyaには、(読み出してきた文字列8文字+「フフフフ」+読み出してきた文字列)入ります。なぜでしょうか?
どなたか教えてください。


YuO  2004-05-07 23:53:35  No: 53511

strncpyは先頭n文字にナル文字がない場合,
出力にナル文字を付加しないからです。


はじめの一歩  2004-05-08 00:05:38  No: 53512

申し訳ございません。初心者の私にはどういうことかよくわかりません。
できればもう少しわかりやすく教えていただけないでしょうか?


Toshi  2004-05-08 00:28:27  No: 53513

http://www9.plala.or.jp/sgwr-t/c/sec02.html#s2-4
http://www9.plala.or.jp/sgwr-t/c/sec07.html

上記2つは抑えてますね?

後は、YuOさんの言う「ナル文字」とは一般的に言う所の
ヌル文字、ヌルターミネート、NULL string、'\0' って意味です。

(アドレス判定時に使う NULL と NULL文字は 結局同じ 0 ですが、
 意味合いが微妙に違うので注意して下さい)


はじめの一歩  2004-05-08 01:19:19  No: 53514

みなさん御教授ありがとうございます。

 while (fgets(moji, 256, fp) != NULL) {
        char fukusya[10] = "";
    
        printf("%s", moji);
        printf("%d\n",strlen(moji));
        if (strlen(moji) > 9 ) {
            strncpy(fukusya,moji,8);
            fukusya[8] = '\n';
            printf("%s",fukusya);    
        }
とすることで解決できました。
文字列の終わりを表す'\0' が必要だったんですね。
皆さんありがとうございました。


はじめの一歩  2004-05-08 01:20:34  No: 53515

チェック忘れてました^^;


Toshi  2004-05-08 01:30:40  No: 53516

ちょっ〜と待ったぁ!

fukusya[8] = '\n';

ケアレスミスですね?
'\n' と '\0'が違う事、ご存知ですね?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加