2012-03-14 11 views
1

目的:Linuxマシンのcで現在の作業ディレクトリを印刷します。ポインタを使用して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; 
} 

しかし、ポインタで、それはbufがポインタであるとき、sizeof(buf)は数あるので、これは、次のエラー

getcwd() error : : Numerical result out of range 

答えて

3

を示しあなたがコメントアウトしたコードのように、配列のサイズではなく、ポインタを格納するのに必要なバイト数。あなたが割り当てられたサイズを渡す必要が

(すなわち1024)の代わりに、次のように:

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

sizeof(buf)しかし、多くのプロセッサがあるビット幅(32ビットまたはになりますchar*のサイズを返します。 64ビット)。何をしたい

は1024

これを試してみてください、この場合には、あなたとmallocをマジックナンバーを使用することです。ここでは、sizeof(buf)としてサイズを与えている

#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);
ましたマシンに依存するbufポインタのサイズが返されます。
getcwdの引数に1024を指定する必要があります。

関連する問題