无法将char(*)[1000]转换为char **

时间:2015-03-31 20:53:54

标签: c++ c string pointers char

我创建了一个名为str的char变量,我试图将其传递给函数。我继续获得error cannot convert char (*)[1000] to char **。我知道对于cannot convert char to char *你只需要在char前面使用&,但我无法弄清楚在这种情况下要做什么。我搜索了堆栈和谷歌,没有运气。有什么想法吗?

 char str2[1000];
           strcpy(str2, "/home/" );
       strcat(str2, pw->pw_name );
        strcat(str2, "/Documents/test4.txt" );


    char bufTest[512];
    int link = GetSymbolicLinkTarget(&str2, bufTest, sizeof(bufTest));

这是函数

int GetSymbolicLinkTarget(char *argv[], char *buf, size_t buf_size){
    int count = readlink(argv[1], buf, buf_size);
    if (count >= 0) {
        buf[count] = '\0';
    }
    return count;
}

2 个答案:

答案 0 :(得分:3)

主要问题是GetSymbolicLinkTarget的第一个参数的类型是char* [] - 一个指向char的指针数组。

&str的类型是char (*)[1000] - 指向1000个字符数组的指针。

这是编译器告诉你的不匹配。

您可以通过各种方式解决它:

选项1

更改GetSymbolicLinkTarget的第一个参数的类型。

int GetSymbolicLinkTarget(char *argv, char *buf, size_t buf_size){

这需要更改函数中argv的使用方式。

然后,你可以使用:

GetSymbolicLinkTarget(str2, bufTest, sizeof(bufTest));

选项2

更改GetSymbolicLinkTarget的第一个参数的类型。

int GetSymbolicLinkTarget(char (*)argv[1000], char *buf, size_t buf_size){

这还需要更改函数中argv的使用方式。

然后,您可以使用:

GetSymbolicLinkTarget(&str2, bufTest, sizeof(bufTest));

选项3

在调用函数中使用包装器变量。

char* argv[2] = {0};
argv[1] = str2;
GetSymbolicLinkTarget(argv, bufTest, sizeof(bufTest));

这不需要对函数中argv的使用方式进行任何更改。

答案 1 :(得分:0)

int GetSymbolicLinkTarget(char *argv[], char *buf, size_t buf_size){
    int count = readlink(argv[1], buf, buf_size);
    if (count >= 0) {
        buf[count] = '\0';
    }
    return count;
}

怪异。此函数将一个字符串数组作为其第一个参数,然后仅查看第二个字符串。所以让我们创建一个字符串数组,我们希望它看到的字符串是第二个:

...
char* p[2];
p[1] = bufTest;
GetSymbolicLinkTarget(p, ...);

你去吧。 GetSymbolicLinkTarget以这种方式工作是非常奇怪的,但你必须用它所期望的来称呼它。