无法将 char (*)[1000] 转换为 char **
cannot convert char (*)[1000] to char **
我创建了一个名为 str 的 char 变量,我正试图将它传递给一个函数。我不断得到 error cannot convert char (*)[1000] to char
**。我知道对于 cannot convert char to char *
你只需在字符前面使用 &
,但我不知道在这种情况下该怎么做。我搜索了 stack 和 google,但没有成功。有什么想法吗?
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] = '[=11=]';
}
return count;
}
int GetSymbolicLinkTarget(char *argv[], char *buf, size_t buf_size){
int count = readlink(argv[1], buf, buf_size);
if (count >= 0) {
buf[count] = '[=10=]';
}
return count;
}
奇怪。此函数将字符串数组作为其第一个参数,然后仅查看第二个参数。因此,让我们创建一个字符串数组,其中我们希望它查看的字符串是第二个:
...
char* p[2];
p[1] = bufTest;
GetSymbolicLinkTarget(p, ...);
好了。 GetSymbolicLinkTarget
以这种方式工作很奇怪,但你必须按照预期的方式调用它。
主要问题是 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
的使用方式进行任何更改。
我创建了一个名为 str 的 char 变量,我正试图将它传递给一个函数。我不断得到 error cannot convert char (*)[1000] to char
**。我知道对于 cannot convert char to char *
你只需在字符前面使用 &
,但我不知道在这种情况下该怎么做。我搜索了 stack 和 google,但没有成功。有什么想法吗?
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] = '[=11=]';
}
return count;
}
int GetSymbolicLinkTarget(char *argv[], char *buf, size_t buf_size){
int count = readlink(argv[1], buf, buf_size);
if (count >= 0) {
buf[count] = '[=10=]';
}
return count;
}
奇怪。此函数将字符串数组作为其第一个参数,然后仅查看第二个参数。因此,让我们创建一个字符串数组,其中我们希望它查看的字符串是第二个:
...
char* p[2];
p[1] = bufTest;
GetSymbolicLinkTarget(p, ...);
好了。 GetSymbolicLinkTarget
以这种方式工作很奇怪,但你必须按照预期的方式调用它。
主要问题是 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
的使用方式进行任何更改。