【问题标题】:"expected 'char *' but argument is of type 'char' " - palindrom + reverse“预期 'char *' 但参数是 'char' 类型” - palindrom + reverse
【发布时间】:2018-11-29 13:17:51
【问题描述】:

现在这个程序成功地反转了键盘输入的单词。但是我想在反转之前“保存”指针中的单词,这样我就可以比较反转的单词和“原始”,并检查它们是否是回文。我还没有太多经验,可能有比我知道的更多的错误,但我找不到解决方案。

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

void reverse(char s[])
{
    int c,i,j;
    for(i=0, j=strlen(s)-1; i<j; i++, j--)
    {
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }

}

void Palindromcheck(char u[], char g[])
{
    if(u == g)
    {
        printf("Word \"%s\" is a palindrom\n", g);
    }
    else
    {
        printf("Word \"%s\" is not a Palindrom\n", g);
    }
}
int main()
{
    char c[30];
    printf("Please enter a value \n");
    scanf("%s", c);
    char *ptr1 = c;
    printf("String: %s\n", c);
    reverse(c);
    printf("%s\n", c);
    Palindromcheck(c, *ptr1);
    return 0;
}

我收到两个警告:

预期为 'char *' 但参数是 'char' 类型

在函数palindromcheck本身,如:

传递 'palindromcheck' 的参数 2 使指针从没有 a 强制转换 [-Wint-conversion]

在函数调用时。

感谢任何帮助:)

【问题讨论】:

  • Palindromcheck(c, ptr1); ? * 将它声明为一个指针,但是当您稍后在它前面加上一个星号时,这意味着取消引用。
  • 请注意,if(u == g) 将比较指针的位置,而不是数组的内容。同样传入char[] 不会传递长度,只是传递开始指针,所以如果你想使用它进行比较,你也需要传递长度。
  • ... 你应该strdup 你要反转的字符串。就目前而言,ptr1 是 c 缓冲区的别名,因此当您将其反转到位时,您也在反转 c。您需要获取它的副本(最好是 free() 之后的副本)
  • Palindromcheck 的参数 2 似乎从整数中生成了一个指针,而没有进行强制转换。编译器需要 char*,但参数是 char 类型。编译器信息需要清晰多少?
  • @Lundin 因为我是编程新手,而且不是英语母语,所以很难理解解决问题究竟需要什么,即使对你来说这听起来微不足道。

标签: c string char palindrome


【解决方案1】:

玩具需要改变这个

Palindromcheck(c, *ptr1);

到这里

Palindromcheck(c, ptr1);

函数需要指向char 的指针,因为参数是char g[],而您正试图仅传递char 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2020-09-13
    • 2020-07-31
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多