2012-03-14 25 views
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 

回答

3

這是因爲當buf是一個指針,sizeof(buf)是多少字節所需的存儲指針,而不是數組的大小,如在您註釋掉的代碼中。

您需要將您分配(即1024),而不是大小,就像這樣:

size_t allocSize = sizeof(char) * 1024; 
buf = (char *)malloc(allocSize); 
if((cwd = getcwd(buf, allocSize)) != NULL) ... 
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; 
} 
1

char *getcwd(char *buf, size_t size);
這裏給您提供大小爲sizeof(buf)這將返回將與機器相關的指針的大小。
您必須在參數getcwd中指定1024。