パスワードを忘れた? アカウント作成
415740 journal

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$
ってことでメモ
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

※ただしPHPを除く -- あるAdmin

読み込み中...