使用字符串文字和字符串变量时,linux / ubuntu / stat()的工作方式有所不同

我想打印当前目录的文件大小。 所以我用stat()函数和path和stat结构。 当前目录是/ home / minky / project / project2。我要打印文件大小的文件在project2中。 当我使用字符串变量。它返回错误,即“没有这样的文件或目录”。 但是,当使用字符串文字时,它可以正常工作(我的意思是程序会打印文件的大小。 我想制作一个程序,我输入文件名(标准输入),然后程序打印该文件的大小。 但是在使用字符串变量和字符串文字时,它的工作方式有所不同...。 我的代码有什么错误吗?(程序很长,我跳过了不相关的代码)

void do_size(char * command){//ignore this command... this is for another part 


    char * filename;//filename that  i want to print file size.
    struct stat  statbuf;

    char * rPath = calloc(BUF_LEN, sizeof(char));

    filename = token_command[1];//token_command[1] is from another function. 

    //make relative path
    sprintf(rPath, "./%s", filename);

    //make absolute path  
    realpath(rPath, realPath);

    if(stat(realPath, &statbuf) < 0 ){
            fprintf(stderr, "stat error\n");
            printf("%s\n",strerror(errno));
            exit(1);
        }

        printf("%ld %s\n", statbuf.st_size, rPath);




}

但是我像这样更改程序(将字符串变量更改为字符串文字),

if(stat("/home/minky/project/project2", &statbuf) < 0 ){
            fprintf(stderr, "stat error\n");
            printf("%s\n",strerror(errno));
            exit(1);
        }

它完全可以正常工作并且不返回错误(“没有这样的文件或目录”)。

评论