c - 使用 scanf 读取字符串的 while 循环变量的意外行为

标签 c

当我包含 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;
  }

最佳答案

根据 if(strcmp(str,"lhx")==0) 判断,您输入了 3 个字符。但是 str 的内存只有 3 个字符。要将其扫描为 stringstr 至少需要 4 个字节的内存。

您可以通过将其更改为:

  char str[4];

但是话又说回来,当你输入 4 个字符时,你会遇到同样的问题。使用 fgets 而不是 scanf()。 fgets() 将防止缓冲区溢出。

另外:为 main() 使用标准签名:int main(void)int main(int argc, char**argv) 或等效代码。

关于c - 使用 scanf 读取字符串的 while 循环变量的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30954366/

相关文章:

c - 如何查看组和其他用户的权限?

C - 如何从代码文件中提取特定的注释行

c - C中的指针初始化

C: printf 中的 SEEK_END 显示意外值

c# - 在 c# 和 c dll 之间使用通用颜色值

在主函数中更改全局数组的大小

c - scanf() 和 for 循环不合作

c - 如何制作可重复的程序

c - C 函数中静态变量有什么用?

无法使用 libpcap 捕获数据包