在c ++中连接字符数组

时间:2012-10-01 00:47:16

标签: c++ arrays string character

我被要求从标准中读取文件,如:

./gscheck < testfile

其中gscheck是我编译的可执行文件的名称。无论如何,我需要使用函数cin.getline()将每一行读入一个字符数组。我知道怎么做,

char line[250];
while (cin.getline(line, 250))
{
    Do stuff;
}

但最终,我不想每行做任何事情,我想将每一行连接成一个巨大的字符数组。我怎样才能使用上面的方法创建一个更大的字符数组,按顺序包含每一行,并包含换行符,这样我基本上从文件中“啜饮”,然后逐字符地解析它,但不使用字符串类。

4 个答案:

答案 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();