从C中的命令行读取

时间:2012-02-19 22:39:37

标签: c string command-line getline

我有一个在命令行中运行的程序(在C中),我希望让它接受来自用户的任意长度的字符串。如果我用C ++编程,我可能会在字符串库中使用getline()函数,但我似乎找不到C等价物。我是否只需要读取X长度的块中的字符,如果字符串超过X长度,则创建一个新的更大的块并将数据复制到新块?

3 个答案:

答案 0 :(得分:2)

您可以将fgetssscanf一起使用。

请注意,getline现在出现在当前的POSIX:2008标准中。

http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html

答案 1 :(得分:0)

使用readline库http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html(如果您不喜欢该许可证,则还有BSD等效项。)

从那里开始,你可以使用readline()函数,它会返回用户键入的char *行(当你'时,请确保在其上调用free()重做或你会有内存泄漏)。您甚至可以设置选项,以便用户可以按向上箭头以获取其上一行(就像几乎所有其他终端一样)。

答案 2 :(得分:0)

您可以使用realloc()来增加输入缓冲区。无需复制数据;它为你做到了。常见的模式是:

if (n_read >= buf_size) {
  buf_size *= 2;
  *buf = realloc(sizeof(char) * buf_size);
}