我被要求从标准中读取文件,如:
./gscheck < testfile
其中gscheck是我编译的可执行文件的名称。无论如何,我需要使用函数cin.getline()将每一行读入一个字符数组。我知道怎么做,
char line[250];
while (cin.getline(line, 250))
{
Do stuff;
}
但最终,我不想每行做任何事情,我想将每一行连接成一个巨大的字符数组。我怎样才能使用上面的方法创建一个更大的字符数组,按顺序包含每一行,并包含换行符,这样我基本上从文件中“啜饮”,然后逐字符地解析它,但不使用字符串类。
答案 0 :(得分:1)
那么:
char file[2000];
char *end=file+1998;
char *ptr=file;
while (!cin.eof() && ptr < end) {
cin.getline(ptr, end-ptr)
ptr += strlen(ptr);
*ptr++ = "\n";
*ptr = 0;
}
答案 1 :(得分:1)
万一你有限制不使用动态内存,std :: string肯定使用:
char a[VERY_BIG_SIZE_ENOUGH_FOR_FILE];
std::cin.read(a, VERY_BIG_SIZE_JUST_ENOUGH_FOR_FILE - 1);
a[VERY_BIG_SIZE_JUST_ENOUGH_FOR_FILE - 1] = '\0';
答案 2 :(得分:1)
根据@ KerrekSB的回答,您可以使用已弃用的std::ostrstream
,它使用字符数组(实际上是char *
,但使用strlen
,您可以轻松地将其作为数组)。
std::ostrstream oss;
oss <<std::cin.rdbuf();
return oss.str();
答案 3 :(得分:0)
不要这样做。
说不。
不要使用“字符数组”。
严重。
使用std::string
。
std::string result;
for (std::string line; std::getline(std::cin, line); )
{
result += line;
}
但是,如果您只想阅读所有内容而不是实际解析行(而不是保留换行符),则直接访问输入缓冲区可能更简单:< / p>
std::ostringstream oss;
oss << std::cin.rdbuf();
return oss.str();