【发布时间】:2017-06-18 10:37:45
【问题描述】:
我在通过scanf 读取两个字符串时遇到以下问题:我插入了第一个字符串,一切正常,但插入第二个字符串后,第一个字符串发生了变化。
#include<stdio.h>
#define N 6
#define K 2
int main(){
char a[N];
char b[K];
int i = 0,j=0;
printf("first word\n\n\n");
scanf("%s", a);
for(i = 0; i <= N; i++){
printf("%c", a[i]);
}
printf("second word \n\n\n");
scanf("%s", b);
for(i = 0; i <= N; i++){
printf("%c", a[i]);
}
}
第一次正确打印。第二次打印类似的字符串(也许当我插入第二个时,第一个 scanf 仍在获取输入)
【问题讨论】:
-
你为两个 scanf 输入了什么?
-
“很明显,我在尊重数组维度的情况下尝试的输入。”——这是真的吗?
for(i = 0; i <= N; i++)表明您忘记了空终止符。 -
或许
for(i = 0; a[i] && i < N; i++){...} -
@Pras、abcabc 和 abc。
-
这些输入不尊重数组维度。见
@xings suggestion;在将%s与scanf()一起使用时,您应该始终指定最大宽度以避免缓冲区溢出。