我正在尝试编写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 ....(就像在第一行)。 我该怎么做才能解决这个问题?
由于
答案 0 :(得分:0)
这是一个缓冲区溢出问题。您应该增加nom
的大小以便能够保存空字符。我不知道tar函数,但是一个例子,
struct header {
char nom[200];
char droits[10];
char taille[20];
char date_modif[20];
char type[5];
};
您应该始终声明char字符串的大小比允许空字符的最大预期长度多1。
答案 1 :(得分:0)
您可以将字符串printf显示的长度限制为10,例如
printf("NOM : %.10s\n", head.nom);
有关printf格式字符串的更多信息,请参阅man 3 printf