首页 > 奇怪的core

奇怪的core

#include<sys/stat.h>
#include<stdio.h>

int
main(int argc, char *argv[])
{
    struct stat *buf;
    for (int i = 1;i<argc;i++) {
        lstat(argv[i], buf);
        mode_t fm = buf->st_mode;// @tag

        const char* filename = argv[i];// !important

        if (S_ISREG(fm)) 
            printf("%s: is regular\n", argv[i]);
        else if (S_ISDIR(fm))
            printf("%s: is directory\n", argv[i]);
        else if (S_ISCHR(fm))
            printf("%s: is character special file\n", argv[i]);
        else if (S_ISBLK(fm))
            printf("%s: is block special file\n", argv[i]);
        else if (S_ISLNK(fm))
            printf("%s: is link file\n", argv[i]);
        else if (S_ISSOCK(fm))
            printf("%s: is sock file\n", argv[i]);
        else    
            printf("%s: unknown type\n", argv[i]);
    }   
}

这段代码是可以顺利跑通的, 但是注意到 !important 那一行, 如果删除这一行, 程序会core

gdb调试结果, 在执行完@tag 这一行之后, 如果后面没有 !important , 则argv数组的内容就没了, 如果有 !important, 则argv数组正常, 这是什么情况? 求解.


楼主,即使你有没有@tag 这一行 或是 !important 这行,都不行吧。因为你没有给buf分配空间,然后你就调用了lstat函数。你先给buf一个malloc动作,就可以了。

【热门文章】
【热门文章】