编译返回“警告:从不兼容的指针类型赋值”

时间:2021-02-25 12:53:49

标签: c

问题

嗨,我有这个函数来检查当前路径并返回带有路径的字符指针。但是当我使用 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;
   }
}

1 个答案:

答案 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;
   }
}