初心者でみません。
指定したテキストファイルの20行の文字列を
一行づつ読み出したいのですが、
テキストファイルを開くところからわかりません。
誰か教えていただけないでしょうか?
Cベースなら
http://www9.plala.or.jp/sgwr-t/
C++ベースなら
http://www.kumei.ne.jp/c_lang/index_cp.html
Toshiさん、
「ねこ」のC編には、なにか問題があるのでしょうか?
と聞いてみる・・・
いや、猫のCはWindows-GUI周りの入門には最適だと思うんですが、
単純なファイルリードってーとVCとかWindowsよりも「C言語入門」
かなと・・・
引き続きお願いします
#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文字+「フフフフ」+読み出してきた文字列)入ります。なぜでしょうか?
どなたか教えてください。
strncpyは先頭n文字にナル文字がない場合,
出力にナル文字を付加しないからです。
申し訳ございません。初心者の私にはどういうことかよくわかりません。
できればもう少しわかりやすく教えていただけないでしょうか?
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 ですが、
意味合いが微妙に違うので注意して下さい)
みなさん御教授ありがとうございます。
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' が必要だったんですね。
皆さんありがとうございました。
チェック忘れてました^^;
ちょっ〜と待ったぁ!
fukusya[8] = '\n';
ケアレスミスですね?
'\n' と '\0'が違う事、ご存知ですね?
ツイート | ![]() |