Pointers를 사용하여 C에서 현재 작업 디렉토리를 인쇄합니다

StackOverflow https://stackoverflow.com//questions/9697056

  •  13-12-2019
  •  | 
  •  

문제

목표 : 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
.

도움이 되었습니까?

해결책

buf가 포인터 인 경우, sizeof(buf) 포인터 을 저장하는 데 필요한 바이트 수입니다. 다음과 같이 할당 한 크기 (즉, 1024)를 전달해야합니다.

size_t allocSize = sizeof(char) * 1024;
buf = (char *)malloc(allocSize);
if((cwd = getcwd(buf, allocSize)) != NULL) ...
.

다른 팁

sizeof(buf)는 프로세서가 넓은 많은 비트 (32 비트 또는 64 비트)가 될 char*의 크기를 반환합니다.

원하는 것은 당신이 malloc'ed 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;
}
.

char *getcwd(char *buf, size_t size);
여기에서는 sizeof(buf)로 크기를 제공하고있는 buf 포인터의 크기를 반환하는 크기를 제공합니다.
getcwd의 인수에 1024를 지정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top