0

当我在文件中写入时,我得到了一个新行,但我不明白为什么:

for(j = 0; j < p_bdClients->tabClient[i].nbComptes; j++){
    fprintf(p_fichier, "%s %f\n",
        p_bdClients->tabClient[i].folios[j].unCompte,
        p_bdClients->tabClient[i].folios[j].solde);
}

我有:

compte1
solde1
compte2
solde2

我想拥有:

compte1 solde1
compte2 solde2

p_bdClients->tabClient[i].folios[j].unCompte我在or上没有换行符p_bdClients->tabClient[i].folios[j].solde

我试过这个:

for(j = 0; j < p_bdClients->tabClient[i].nbComptes; j++){
   printf("%s\n", p_bdClients->tabClient[i].folios[j].unCompte);
}

我得到了:

compte1
compte2

但是这段代码:

for(j = 0; j < p_bdClients->tabClient[i].nbComptes; j++){
    printf("|%s| %f\n",
        p_bdClients->tabClient[i].folios[j].unCompte,
        p_bdClients->tabClient[i].folios[j].solde);             
}

输出为 -

| solde1
| solde2

我没有第一个“|” p_bdClients->tabClient[i].folios[j].unCompte我不明白为什么。

和:

for(j = 0; j < p_bdClients->tabClient[i].nbComptes; j++){
    for(w=0; w<strlen(p_bdClients->tabClient[i].folios[j].unCompte); ++w){
        printf("%02hhx ", p_bdClients->tabClient[i].folios[j].unCompte[w]);
}
}
printf("\n");

我有:

68 79 70 6f 74 68 65 71 75 65 0d 63 68 65 71 75 65 0d 65 70 61 72 67 6e 65 32 0d 
63 68 65 71 75 65 0d 63 61 72 74 65 2d 63 72 65 64 69 74 0d 
68 79 70 6f 74 68 65 71 75 65 0d 63 61 72 74 65 2d 63 72 65 64 69 74 0d 65 70 61 72 67 6e     65 31 0d 63 68 65 71 75 65 0d 65 70 61 72 67 6e 65 32 0d 
63 68 65 71 75 65 0d 63 61 72 74 65 2d 63 72 65 64 69 74 0d 65 70 61 72 67 6e 65 31 0d 
68 79 70 6f 74 68 65 71 75 65 0d 
63 68 65 71 75 65 0d 65 70 61 72 67 6e 65 32 0d 

谢谢你的帮助

4

2 回答 2

4

每行末尾的 0x0d(例如“68 79 70 6f 74 68 65 71 75 65 0d ”)是回车符。不要将其存储unCompte(或将其设置为 0x00),一切都会好起来的。

于 2013-09-25T20:19:22.493 回答
1

您是否可能会去除换行符(或读取先前去除换行符的数据)?看起来像回车,ASCII 0x0D,在十六进制转储中可见,没有正确剥离。修复它。

请注意,文件中的新行可能是 CR (0x0D) 和 LF (0x0A) ASCII 字符的不同组合,具体取决于文件的创建位置和创建方式。LF (Unix) 和 CR+LF (MS-DOS/Windows) 是最常见的。

在许多终端中,打印 CR 会将光标移动到行首,然后(不跟随 LF 移动到下一行)行上的旧字符将被覆盖,如果这不是故意的,则会导致输出混乱。

于 2013-09-25T20:35:42.043 回答