1

目的:在 Linux 机器上打印 c 中的当前工作目录。

不使用指针,它给出正确的输出..

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
int main()
{
    //char buf[1024];

    char * buf;
    char * cwd;
    buf = (char *)malloc(sizeof(char) * 1024);

    if((cwd = getcwd(buf, sizeof(buf))) != NULL)
            printf("pwd : %s\n", cwd);
    else
            perror("getcwd() error : ");
    return 0;
}

但是用指针它显示以下错误

getcwd() error : : Numerical result out of range
4

3 回答 3

3

这是因为 whenbuf是指针,是存储指针sizeof(buf)所需的字节数,而不是数组的大小,如您注释掉的代码中那样。

您需要传递您分配的大小(即 1024),如下所示:

size_t allocSize = sizeof(char) * 1024;
buf = (char *)malloc(allocSize);
if((cwd = getcwd(buf, allocSize)) != NULL) ...
于 2012-03-14T06:43:52.047 回答
1

sizeof(buf)将返回其大小,char*无论您的处理器是多少位宽(32 位或 64 位)。

你想要的是使用你 malloc'ed 的幻数,在本例中为 1024。

试试这个:

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

int main()
{
    //char buf[1024];

    char * buf;
    char * cwd;
    buf = (char *)malloc(sizeof(char) * 1024);

    if((cwd = getcwd(buf, 1024)) != NULL)
            printf("pwd : %s\n", cwd);
    else
            perror("getcwd() error : ");
    return 0;
}
于 2012-03-14T06:44:42.883 回答
1

char *getcwd(char *buf, size_t size);
在这里,您给出的大小sizeof(buf)将返回buf将取决于机器的指针的大小。
您必须在参数中指定 1024 getcwd

于 2012-03-14T06:49:03.163 回答