bananan_wの日記: おらいりーたんが口すっぱく言うので
日記 by
bananan_w
C で fgets() する時にはデリミタの文字も含めてバッファに入るけど、C++ で fgets() 気分でストリームから getline() して char* に突っ込む場合にはデリミタ文字がなくなるからきをつけれ。という話。C++ でゴリゴリ書く時にはなるべく char* なんか使わないように気をつければいいような気もする。
--- 2005/1/2 追記 ---
getline() で std::string に入れる場合にもデリミタ文字がなくなるから要注意なの☆
--- 追記ここまで ---
$ cat moemoe.txt
aaa
$ cat fgets.c
#include <stdio.h>
int main()
{
FILE *fp;
char buf[1024];
fp = fopen("moemoe.txt", "r");
fgets(buf, sizeof(buf), fp);
buf[sizeof(buf)-1] = '\0';
fclose(fp);
printf("%s", buf);
return 0;
}
$ ./fgets
aaa
$ cat getline.cpp
#include <iostream>
#include <fstream>
const char FILE_NAME[] = "moemoe.txt";
int main()
{
char buf[1024];
std::ifstream data_file(FILE_NAME);
data_file.getline(buf, sizeof(buf), '\n');
data_file.close();
std::cout << buf;
return 0;
}
$ ./getline
aaa$
ってことでメモ
--- 2005/1/2 追記 ---
getline() で std::string に入れる場合にもデリミタ文字がなくなるから要注意なの☆
--- 追記ここまで ---
$ cat moemoe.txt
aaa
$ cat fgets.c
#include <stdio.h>
int main()
{
FILE *fp;
char buf[1024];
fp = fopen("moemoe.txt", "r");
fgets(buf, sizeof(buf), fp);
buf[sizeof(buf)-1] = '\0';
fclose(fp);
printf("%s", buf);
return 0;
}
$ ./fgets
aaa
$ cat getline.cpp
#include <iostream>
#include <fstream>
const char FILE_NAME[] = "moemoe.txt";
int main()
{
char buf[1024];
std::ifstream data_file(FILE_NAME);
data_file.getline(buf, sizeof(buf), '\n');
data_file.close();
std::cout << buf;
return 0;
}
$ ./getline
aaa$
ってことでメモ
おらいりーたんが口すっぱく言うので More ログイン