Compare two strings as in strcmp error error: invalid type argument of unary ‘*’ (have ‘int’)

Compare two strings as in strcmp error error: invalid type argument of unary ‘*’ (have ‘int’)

我正在尝试编写一个 C 函数来比较字符串,而不是指针相等,而是内容相等。但是我得到一个错误

error: invalid type argument of unary ‘*’ (have ‘int’)

这是我的代码:

#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);
}

对于由 *ptr 指向的数组,位置 i 处的元素被 *(ptr + i) 取消引用,这相当于 ptr[i] 而不是 *ptr[i].

这个if语句

if (*word1[i] != *word2[i]) {

不正确,因为表达式 word1[i]word2[i] 的类型为 char。因此,您可能不会对 char.

类型的对象应用取消引用运算符

你应该这样写

if ( word1[i] != word2[i]) {

注意标准字符串函数 strcmp 只有两个参数,它 returns 要么是负值,要么是零,要么是正值,这取决于第一个字符串是否大于第二个字符串或等于第二个字符串或小于第二个字符串。

您的意思似乎是另一个标准字符串函数 strncmp,它确实具有三个参数..

还需要检查是否已经遇到零终止符。

除此之外,函数参数应具有限定符 const,因为传递的字符串不会在函数内更改。

函数可以通过以下方式声明和定义

int stringcompare( const char *s1, const char *s2, size_t n )
{
    while ( n && *s1 && *s1 == *s2 )
    {
        ++s1;
        ++s2;
        --n;
    }

    return n == 0 ? 0 : *s1 - *s2;
}