1

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

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

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

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.... (就像第一行一样)。我该如何解决这个问题?

谢谢

4

2 回答 2

0

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

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

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

于 2012-11-17T22:09:40.267 回答
0

例如,您可以将 printf 显示的字符串长度限制为 10

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

有关 printf 格式字符串的更多信息,请参见man 3 printf

于 2012-11-17T22:10:02.093 回答