c - 解析 tar header 时的错误值

标签 c tar

我正在尝试编写 tar 函数,但我遇到了一些问题。 我想读取我的 tar 文件并解析标题数据。 这是我的结构

struct header { 
    char nom[100];
    char droits[3];
    char taille[12];
    char date_modif[12];
    char type[1];
};

现在我的代码来解析 header 数据:

while ( fread(head.nom, 100, 1, archive) != 0 ){

    printf("NOM : %s\n", head.nom);


    //droits
    fread(head.droits, 3, 1, archive);


    printf("DROITS : %s\n", head.droits);

    //taille
    fread(head.taille, 12, 1, archive);

    printf("TAILLE : %s\n", head.taille);


    //last modif
    fread(head.date_modif, 12, 1, archive);

    printf("MODIF : %s\n", head.date_modif);


    //type
    fread(head.type, 1, 1, archive);

    printf("TYPE : %s\n", head.type);

    printf("NOM : %s\n", head.nom);

    exit(1);
    // on se place a la fin du premier fichier
    fseek(archive, oct2dec(atoi(head.taille)), SEEK_CUR);


    //fprintf(stdout, "%s %d \n", head.nom, oct2dec(atoi(head.taille)));        

    i++;
}

结果是:

NOM : a.txt...............................................................................................
DROITS : 664
TAILLE : 936.........
MODIF : 1352910882..
TYPE : 1
NOM : a.txt...............................................................................................664936.........1352910882..1

我的问题是最后一行显示了我所有的数据,而我只想显示 a.txt....(就像第一行一样)。 我该如何解决这个问题?

谢谢

最佳答案

这是缓冲区溢出问题。您应该增加 nom 的大小,以便能够容纳空字符。我不知道 tar 函数,但举个例子,

struct header { 
    char nom[200];
    char droits[10];
    char taille[20];
    char date_modif[20];
    char type[5];
};

您应该始终将 char 字符串的大小声明为比允许空字符的最大预期长度多 1。

关于c - 解析 tar header 时的错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13435178/

相关文章:

linux - Tar 几个文件保存目录树

C 在函数中分配指针,不会改变原始指针(void *)

c - 基于 ARM 的板上 While 循环的巨大 CPU 负载

objective-c - 如何让 rand() 更有可能选择某些数字?

c - 在字符串中查找空格和字母数字字符

linux - 没有元数据的 tar 存档

perl - 为什么即使我正在使用 Archive::Tar:Streamed,%MEM 也会逐渐增加?

c - 创建后我怎么能记住树的根

java - linux下使用ant的tar任务时如何指定子目录的权限?

linux - 如何使用特定名称(日期月份名称)压缩特定目录