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

C语言实现字符串内容对比时出现unary '*' (have 'int')错误如何解决

错误成因

报错的直接触发点是代码中if (*word1[i] != *word2[i])这一行,指针操作逻辑不符合C语法规则:

  • word1、word2均为char *类型的指针,word1[i]的语义等价于*(word1 + i),本身已经完成了「指针偏移i个单位+解引用取对应字符」的操作,得到的结果是char类型的字符值,在C语言运算时会隐式提升为int类型。
  • 代码额外添加了一元*解引用运算符,相当于尝试对一个int类型的普通数值执行仅指针支持的解引用操作,因此编译器抛出invalid type argument of unary ‘*’ (have ‘int’)错误。

修复方案

只需要去掉比较语句中多余的一元*运算符即可,有两种等价的写法可选:

  • 写法1:保留数组下标访问的写法,直接比较字符值
if (word1[i] != word2[i])
  • 写法2:使用纯指针偏移+解引用的写法,和下标访问逻辑完全等价
if (*(word1 + i) != *(word2 + i))

修复后完整可运行代码

#include <stdio.h>
#include <stdlib.h>

int stringcompare(char * str1, char * str2, int strSize){
  char * word1 = str1;
  char * word2 = str2;
  
  for (int i = 0; i < strSize; i++) {
    // 去掉多余的*后正常比较
    if (word1[i] != word2[i]) {
      printf("The strings are DIFFERENT!");
      return 1;
    }
  }
  printf("The strings are a MATCH!");
  return 0;
}

int main(void){
  char * str1 = "Hello World!";
  char * str2 = "Hello World!";
  stringcompare(str1, str2, 13);
}

可选优化点

  • 代码中额外定义的word1、word2指针没有特殊作用,可以直接用入参str1、str2做下标访问,减少冗余变量。
  • 如果对比的是标准C风格以\0结尾的字符串,可以不用传入长度参数,循环中判断是否读到\0即可终止对比,适配动态长度的字符串场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:45:01