我的代码出了什么问题?一元的类型参数无效。双指针

时间:2014-07-17 15:17:31

标签: c pointers

我刚刚开始学习C并且我收到指针的各种错误。我无法真正找到下面的代码有什么问题。我浪费了一天来解决这个问题但仍然没有。它说一元的无效类型参数。我怀疑原因是双指针。我尝试了几种解决方法。在进行比较和类似的事情之前,我试图为双指针放置括号。但没有任何帮助。 这里真的有什么不对?我将非常感谢你的帮助。

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

int isEqual(char *line, char *word){
    while(**line == **word && **line && **word){
        (*line)++;
        (*word)++;
    }

    if(**line == **word == '\0') return 1;
    else return 0;
}

int main(){ 

    int i;
    int argc = 2;
    char **lines;
    *lines = "sort";
    (*lines)++;
    *lines = "revs";

 if(isEqual(*lines, "sort")){
        printf("Equal");
    }else{
        printf("Not equal");
    }

    }

    return 0;
}

3 个答案:

答案 0 :(得分:3)

变量lines未初始化

char **lines;

所以下一个陈述已经无效

*lines = "sort";

同样在函数中这句话

while(**line == **word && **line && **word){

也无效,因为您可能不会两次将解除引用应用于定义为char *的对象

函数IsEqual完全无效并使用无效的C结构。

有效程序可以采用以下方式

#include <stdio.h>

int isEqual( const char *line, const char *word )
{
    while( *line == *word && *line )
    {
        line++;
        word++;
    }

    return *line == *word;
}

int main( void )
{ 

    char * lines[2];
    lines[0] = "sort";
    lines[1] = "revs";

    if ( isEqual( lines[0], "sort" ) )
    {
        puts( "Equal" );
    }
    else
    {
        puts( "Not equal" );
    }

    if ( isEqual( lines[1], "sort" ) )
    {
        puts( "Equal" );
    }
    else
    {
        puts( "Not equal" );
    }

    return 0;
}

或者代替这三个陈述

    char * lines[2];
    lines[0] = "sort";
    lines[1] = "revs";

你只能写一个陈述

    char * lines[2] = { "sort", "revs" };

输出

Equal
Not equal

答案 1 :(得分:1)

首先,您需要向我们展示实际的错误消息,我认为它类似于

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

*非常重要,因为这是他们抱怨的运营商。请更新您的问题以显示完全(复制并粘贴)错误消息,并清楚地指出您所引用的程序的哪一行。

您已将line定义为char*类型的对象,因此*line的类型为char,而**line是非法的(因为{ {1}}不是指针。)

char更改为**line至少应该避免该错误。我没有花时间弄清楚这是否是你需要做的唯一改变。

(顺便说一句,请避免使用短语“双指针”,它可以引用类型*line。改为使用“指向指针”。但是你没有指向double*函数中指针的指针。)

答案 2 :(得分:0)

一开始

int isEqual(char *line, char *word){
    while(**line == **word && **line && **word){

当您按line声明char* line时,您说line是指向char类型变量的指针,这意味着line的值是char类型变量的地址。

当您使用指针时,*line表示char指向的line类型变量的值。因此,当您使用**line时,它没有任何意义,因为您尝试从值*line的地址获取值。

例如,如果您的line指向char类型变量且值为&#39; a&#39;,则**line是保存在地址{{1}的值}}。 (因为&#39; a&#39;的ascii值是0x61,而C将0x61视为char