gpt4 book ai didi

c - linux stat函数中的struct stat * buffer和&buffer有什么区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:40 24 4
gpt4 key购买 nike

我正在尝试获取父目录统计信息。

如果我编写如下代码,它会返回error: Bad address

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <dirent.h>

int main(int agrc, char * argv[]){
struct stat *buffer;
int res = stat("..", buffer);
if(res != 0){
perror("error");
exit(1);
}
//printf("%d", buffer->st_ino);

}

但是如果我下面这样写代码,就没有问题了。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <dirent.h>

int main(int agrc, char * argv[]){
/* struct stat *buffer; */
struct stat buffer;
int res = stat("..", &buffer);
if(res != 0){
perror("error");
exit(1);
}
//printf("%d", buffer->st_ino);
printf("%d", buffer.st_ino);

}

不知道为什么结果不一样。

定义struct stat * buffer的变量bufferstruct stat的指针

&buffer也是struct stat的指针

该函数在联机帮助页中定义如下

SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int stat(const char *pathname, struct stat *buf);
...

我预计结果都成功了,为什么结果不同?任何人都可以提供帮助,非常感谢。

最佳答案

使用 struct stat buffer; ,堆栈上有分配给 buffer 的内存。
但是对于 struct stat *buffer;,没有为 buffer 分配内存。您必须使用内存分配函数来分配内存。这种分配发生在所谓的堆上。

struct stat *buffer = malloc(sizeof(struct stat));

请注意 stat()统计path指向的文件,填入buf。因此,如果 buf 没有指向程序拥有的内存,则会导致 error: Bad address

关于c - linux stat函数中的struct stat * buffer和&buffer有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56109844/

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