问题
嗨,我有这个函数来检查当前路径并返回带有路径的字符指针。但是当我使用 GCC 进行编译时,它会返回这两个警告。我尝试了一些解决方案,但无法解决。
应该如何处理此警告?
警告
In file included from C:\Users\Lsy\Documents\C\murtza_debug\main.c:10:0:
C:\Users\Lsy\Documents\C\murtza_debug\system/path.h:6:10: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
int *p = cwd;
^~~
C:\Users\Lsy\Documents\C\murtza_debug\system/path.h: In function 'get_path':
C:\Users\Lsy\Documents\C\murtza_debug\system/path.h:9:7: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
p = &cwd;
^
代码
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
char cwd[8024];
int *p = cwd;
int* get_path() {
p = &cwd;
if (getcwd(cwd, sizeof(cwd)) != NULL) {
return p;
}
}
答案 0 :(得分:3)
cwd
是一个 char
数组,在被赋值之前它被转换为指向数组第一个元素的指针 char*
。因此,您应该使用 char*
而不是 int*
作为 p
的类型来让它接受它并使用 char*
作为 get_path()
的返回类型来返回p
。
还有 &cwd
是另一种类型的指针 char(*)[8024]
(指向数组本身的指针)。只使用一种类型的指针应该是 cwd
。
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
char cwd[8024];
char *p = cwd;
char* get_path() {
p = cwd;
if (getcwd(cwd, sizeof(cwd)) != NULL) {
return p;
}
}