如何在C中获取字符串行

如何在C中获取字符串行,c,C,我想用C写一行字符串,怎么做? 如果我在printf中使用格式说明符%s,它最多只能使用第一个空格。如何去掉它?除了使用getline,还有其他方法吗? 提前感谢。scanf对于从输入流中提取行来说是一个糟糕的选择。虽然您可以很容易地做到这一点: buf[SIZE]; scanf ("%[^\n]\n", buf); 您将面临遭受缓冲区溢出错误/攻击的风险 更好的方法是使用fgets一次读取“大小”字符,并将数据复制到动态分配的缓冲区中,您可以在填充缓冲区后调整其大小: buf[SIZE];

我想用C写一行字符串,怎么做? 如果我在printf中使用格式说明符%s,它最多只能使用第一个空格。如何去掉它?除了使用getline,还有其他方法吗?
提前感谢。

scanf
对于从输入流中提取行来说是一个糟糕的选择。虽然您可以很容易地做到这一点:

buf[SIZE];
scanf ("%[^\n]\n", buf);
您将面临遭受缓冲区溢出错误/攻击的风险

更好的方法是使用
fgets
一次读取“大小”字符,并将数据复制到动态分配的缓冲区中,您可以在填充缓冲区后调整其大小:

buf[SIZE];
do {
  fgets (buf, SIZE, stdin);
  /* Handle copying to dynamic buffer and resize over here */
} while (/*check we haven't reached eol*/);

你是说scanf吗?@chris:那页上还写着“永不使用gets()”@chris并建议你使用instead@Oren,是的,我没有看到关于
\u s
版本是可选的说明。看起来像是少了一个参数的
fgets
,但如果它是可选的,meh。“%[^\n]\n”给人的印象是,在获取EOL之前的文本后,EOL(并且仅消耗EOL)将被删除。而是使用EOL和以下所有空白。备选方案“%[^\n]%*c”。但正如您所建议的那样,fgets()才是正确的选择。