当我包括scanf读取字符串时,n的值在下面的代码中突然改变。我也试过%* c,但它仍然显示相同的错误。
#include<stdio.h>
#include<string.h>
int main()
{
char str[3];
int n;
int t,p=0;
scanf("%d",&t);
while(t--)
{
printf("t=%d ",t);
scanf("%d",&n);
while(n!=0)
{
printf("n=%d",n);
p=0;
scanf("%s",str);
getchar();
if(strcmp(str,"lhx")==0)
printf("lhx");
else
printf("hhb");
n--;
}
}
return 0;
}
答案 0 :(得分:1)
根据if(strcmp(str,"lhx")==0)
判断,您输入的是3个字符。但str
只有3
个字符的内存。要将其扫描为字符串,str
至少需要4个字节的内存。
您可以将其更改为:
char str[4];
但是再次,当你输入4个字符时,你会遇到同样的问题。使用fgets
代替scanf().
fgets()
可以防止缓冲区溢出。
除此之外:使用main()
:int main(void)
或int main(int argc, char**argv)
或其等效的标准签名。
答案 1 :(得分:1)
问题是你的数组只能容纳3个字符
char str[3];
所以2个有效字符后跟一个空终止符,但你要用3个字符的字符串检查它。
所以将数组更改为
char str[4];
使用scanf()扫描字符串总是一个坏主意,而不是使用fgets()
。