【发布时间】:2021-01-16 15:18:03
【问题描述】:
我对 C 很陌生。我想填充一个二维数组,其中每一行都使用一个字符串作为输入来填充。 我目前的解决方案如下:
char word[2][100]
for (int i = 0; i < 2; i++) {
scanf(" %[^\n]", word[i]);
}
我通常理解 %[^\n] 说明符,但不明白为什么在它之前需要空间才能工作。
当我尝试对 %s 做同样的事情时,事情开始变得很奇怪。
char word[2][100]
for (int i = 0; i < 2; i++) {
scanf("%s", word[i]);
}
它允许 3 个输入而不是 2 个输入并且使我的程序崩溃。
【问题讨论】:
-
why space is needed before空格会跳过前一次读取在输入流中留下的换行符。do the same with %s你不能对%s做同样的事情,因为它读取空格分隔的字符串,而%[^\n]读取所有内容直到换行。 -
“它允许 3 个输入”是什么意思?在您未显示的此循环之后是否有对 scanf 的调用? 总是检查scanf返回的值。 从不使用
"%s"。如果你想使用"%s",请使用最大字段限制版本"%99s"(在这种情况下99是合适的,因为你正在将一个字符串读入一个可以容纳最大长度为99的字符串的缓冲区) -
同样,考虑
" %99[^\n]"来防止缓冲区溢出。
标签: c scanf user-input format-specifiers