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

これは、 when bufis a pointerは、コメントアウトしたコードのように、配列のサイズではなく、pointersizeof(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 したマジック ナンバー (この場合は 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)のサイズを返すサイズを指定しています。 への引数には 1024 を指定する必要があります。buf
getcwd

于 2012-03-14T06:49:03.163 に答える