gpt4 book ai didi

c - 带指针的 getcwd() 返回 "null"

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:25 25 4
gpt4 key购买 nike

我想记忆一下 C 编程。

我为自己找到的一项任务是使用指针在函数之间传递字符串变量。

所以 - 我想做的:

  • 创建一个数组;
  • 创建一个指向这个数组的指针;
  • 将指针作为参数传递给另一个函数;
  • 在第二个函数中调用getcwd()
  • 打印结果。

这是我的代码:

#include <stdio.h>
#include <unistd.h>

int ch_str(char point1[]) {
printf("Point 1: %s\n", point1);
}

int getpath (char point2[]) {
printf("Path: %s\n", getcwd(point2, sizeof(point2)));
}

int main () {

char str[20] = "this is string";
char *pStr;
pStr = &str;

ch_str(pStr);

char pathname[1024];
char *pPathname;
pPathname = &pathname;

getpath(pPathname);

printf("Direct: %s\n", getcwd(pathname, sizeof(pathname)));

return 0;
}

ch_str() 在这里 - 对我来说只是“测试”,以确保我用指针做的正确(嘿嘿)。并且 - 这部分有效。

但是 getcwd() 以指针作为参数 - 只需重新调整“null”:

$ ./deploy
Point 1: this is string
Path: (null)
Direct: /home/setevoy/ci

我想 - 这是我对 C 中指针的一些(大...)误解,但是:

The getcwd() function copies an absolute pathname of the current working directory to the array pointed to by buf

数组 (pathname[1024]) 通过指针 pPathname 传递,所以 - 为什么 getcwd() 不能将路径保存到 路径名[1024]位置?我在这里看不到什么?

最佳答案

在 C 中,作为函数参数的数组是按引用传递的,而不是按值传递的。

这意味着在您的代码中,在函数 getpath 中,char point2[] 的大小是 char * 的大小,而不是参数指向的数组的大小。

由于指针的大小太小而无法包含整个路径,因此返回 NULL。来自 getcwd 联机帮助页:

The getcwd() function copies an absolute pathname of the current working directory to the array pointed to by buf, which is of length size. If the length of the absolute pathname of the current working directory, including the terminating null byte, exceeds size bytes, NULL is returned, and errno is set to ERANGE; an application should check for this error, and allocate a larger buffer if necessary.

关于c - 带指针的 getcwd() 返回 "null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37363140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com