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
相关产品推荐
相关产品推荐

