我正在编写一个简单的 C 程序,以使用 const Home = () => {
const [data, setData] = useState();
return (
<div className="home">
<search ></search>
</div>
);
}
获取用户对不同变量的输入,如下所示:
const Search = () => {
return (
<div className="search">
<input type="text" />
<button>Search</button>
</div>
);
}
正如预期的那样,此输出完全正常:
scanf()
但后来我也尝试为一个字符串数组取输入,如下(这里#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
是一个字符串数组):
input: 10 23
output: 10
23
现在输出出乎意料:
char c[2]
在这里,可以看出为变量 #include <stdio.h>
int main(){
int a, b;
char c[2];
scanf("%d %d %s", &a, &b, c);
printf("%d\n",a);
printf("%d\n",b);
printf("%s\n",c);
return 0;
}
打印的值将是 input: 10 23 AM
output: 10
0
AM
,而不是预期的 b
。字符串数组的输入如何改变变量 0
的值?
有人可以帮忙弄清楚我做错了什么(当然是愚蠢的错误)?强调文字
答案 0 :(得分:2)
您的 char c[2];
变量不是一个足够大的数组,无法容纳 2 个字符的字符串加上所需的 nul
-终止符。如果您知道输入将不超过 2 个字符,则更改为 char c[3];
应该就足够了;但是,为了增加安全性,您可以限制 scanf
调用将读取的字符数,使用格式说明符 %2s
(或者,更一般地说,对于 {{ 1}} 在该格式说明符中使用值 char buff[n];
)。
就目前而言,您有未定义的行为 – 这可能包括覆盖为 n - 1
提供的值(使用零应该是 b
-终止符)。