2

在参数传递期间我无法弄清楚这个错误。

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

typedef char my_char;

void myfunc(const my_char** data)
{
    printf ("%s\n", *data);
    printf ("%s\n", *(data + 1));
}

int main(){

    char **mydata;
    mydata = malloc(sizeof(char*)*2);
    mydata[0] = malloc(sizeof(char)*50);
    mydata[1] = malloc(sizeof(char)*50);

    memset(mydata[0],'\0',50);
    memset(mydata[1],'\0',50);
    strcpy (mydata[0], "Hello");
    strcpy (mydata[1], "world");

    myfunc((my_char**)mydata);

    free (mydata[0]);
    free (mydata[1]);
    free (mydata);

    return 0;
}

它工作正常。但是当我明确输入参数时会发出警告。为什么会这样?显示的警告是:

warning: passing argument 1 of ‘myfunc’ from incompatible pointer type

据我所知,类型转换应该有助于编译器理解指针所持有的数据类型。但在这里它根本没有帮助。

4

3 回答 3

2

在对数据类型进行类型转换时使用const

myfunc((const my_char**)mydata);

您在函数中获得该值const

于 2015-01-13T09:00:48.153 回答
0

Remove const,添加 const 会导致传递的参数类型与声明混淆,并像这样对数据元素进行类型转换:

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

typedef char my_char;

void myfunc(my_char** data)
{
    printf("%s\n", *data);
    printf("%s\n", *(data + 1));
}

int main(){

    char **mydata;
    mydata = (char **)malloc(sizeof(char*)* 2);
    mydata[0] = (char *)malloc(sizeof(char)* 50);
    mydata[1] = (char *)malloc(sizeof(char)* 50);

    memset(mydata[0], '\0', 50);
    memset(mydata[1], '\0', 50);
    strcpy(mydata[0], "Hello");
    strcpy(mydata[1], "world");

    myfunc((my_char**)mydata);

    free(mydata[0]);
    free(mydata[1]);
    free(mydata);

    return 0;
}
于 2015-01-13T09:02:07.480 回答
0

您要么从 void myfunc( const my_char** data) 即 void myfunc(my_char** data) 中删除 const ,要么在类型转换时提供 const 即 myfunc(( const my_char**)mydata);

于 2015-01-13T09:04:17.113 回答