You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么输入pass1后这段C代码中的if结构仍未运行?

问题根因

在C语言中,==运算符直接作用于字符数组/字符串指针时,比较的是两个变量指向的内存地址,而非字符串实际存储的内容。
你代码中pass是栈内存上的字符数组首地址,宏ab对应的是只读数据段中字符串常量"pass1"的首地址,二者地址永远不相等,因此if判断永远为假,分支不会执行。

修复方案
  • 将if判断中的pass == ab替换为strcmp(pass, ab) == 0。strcmp是<string.h>头文件提供的字符串比较函数,当两个字符串内容完全匹配时返回值为0。
  • 替换不安全的gets()函数:该函数不校验输入长度,存在缓冲区溢出风险,建议使用fgets()替代。如果使用fgets需要注意其会将输入末尾的换行符也存入数组,匹配前需要手动去除。
修复后完整代码
#include <stdio.h>
#include <string.h>
#define ab "pass1"

int main() {
  char pass[8];
  char str[8];
  printf("Enter a string :");
  // 替换gets为fgets避免缓冲区溢出
  fgets(str, sizeof(str), stdin);
  // 去除fgets读入的末尾换行符
  str[strcspn(str, "\n")] = '\0';
  strcpy(pass, str);

  printf("your string is %s ", str);

  // 用strcmp比较字符串内容
  if (strcmp(pass, ab) == 0) {
    printf("la swagat cha!");
  }
  return 0;
}

内容的提问来源于stack exchange,提问作者Abhishek Bhattarai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:48:04