Pointers를 사용하여 C에서 현재 작업 디렉토리를 인쇄합니다
문제
목표 : 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를 지정해야합니다.
제휴하지 않습니다 StackOverflow