我有一个在命令行中运行的程序(在C中),我希望让它接受来自用户的任意长度的字符串。如果我用C ++编程,我可能会在字符串库中使用getline()函数,但我似乎找不到C等价物。我是否只需要读取X长度的块中的字符,如果字符串超过X长度,则创建一个新的更大的块并将数据复制到新块?
答案 0 :(得分:2)
您可以将fgets
与sscanf
一起使用。
请注意,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);
}