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

C语言strcmp函数参数错误求助:无强制转换将整数转为指针

解决strcmp参数类型错误及其他代码问题
  • 变量类型定义错误:你把hash1和hash2定义成了单个char类型,而哈希值是字符串,需要用字符数组来存储,比如char hash1[65], hash2[65];(选65是因为SHA-256哈希是64个字符加结束符'\0')。同时strcmp的返回值是int类型,不是char,所以result要定义为int。
  • strcmp参数传递错误:strcmp要求两个参数都是指向字符串的指针(const char*),而你传入的是单个char变量,编译器会把它当成整数处理,转换为指针时就会触发警告。改成字符数组后,直接传入数组名即可(数组名本身就是指向首元素的指针)。
  • 条件判断错误:strcmp返回0表示两个字符串相等,你写成了result == "0",这里的"0"是字符串字面量,和整数0不是一回事,应该写成result == 0。
  • scanf使用问题:用scanf("%s")读取字符串时,直接传入数组名即可,不需要加&;另外最好限制输入长度,避免缓冲区溢出,比如scanf("%64s", hash1);,确保不会超出数组的容量。
  • main函数标准写法:C标准要求main函数返回int类型,所以要写成int main()。

修正后的代码:

#include <stdio.h>
#include <string.h>

int main()
{
    // 定义足够大的字符数组存储哈希值,这里假设最多64个字符(SHA-256)
    char hash1[65], hash2[65];
    int result;
    
    printf("Insert first hash\n");
    // 限制输入长度为64,防止缓冲区溢出
    scanf("%64s", hash1);
    printf("Insert second hash\n");
    scanf("%64s", hash2);

    result = strcmp(hash1, hash2);
    
    if (result == 0) {
        printf("VALID MATCH\n");
    } else {
        printf("INVALID MATCH\n");
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:22:09