ループの80文字ごとに7つのタブを追加し、最後に新しい行を追加しようとしています。C - whileループの先頭と末尾に文字列を追加する
7つのタブ、80文字、1行の改行などが表示されます。
しかし、何か変なことが起こっています。最初の2文字の直後に新しい行が印刷されてから、それ以降はすべてが歪んでいます。
なぜ%80ではなく%40が必要なのかよくわかりません.2バイトがあるからですか?
私は一般的に2バイト混乱していると思います。
void do_file(FILE *in, FILE *out, OPTIONS *options)
{
char ch;
int loop = 0;
int sz1,sz2,sz3;
int seeker = offsetof(struct myStruct, contents.datas);
//find total length of file
fseek(in, 0L, SEEK_END);
sz1 = ftell(in);
//find length from beggining to struct beginning and minus that from total length
fseek(in, seeker, SEEK_SET);
sz2 = sz1 - ftell(in);
int tabs = (sz2/80) * 8;// Total size/size of chunk * 8 - 7 tabs and 1 new line char
sz3 = ((sz2 + 1 + tabs) * 2); //Total size + nuls + tabs * 2 for 2 bytes
char buffer[sz3];
char *p = buffer;
buffer[0] = '\0';
while (loop < sz2)
{
if(loop % 40 == 0){
//Add 7 tabs to the beginning of each new line
p += sprintf(p, "%s", "\t\t\t\t\t\t\t");
}
fread(&ch, 1, 1, in);
//print hex char
p += sprintf(p, "%02X", (ch & 0x00FF));
if(loop % 40 == 0){
//Add a new line every 80 chars
p += sprintf(p, "%s", "\n");
}
strcat(buffer, p);
loop++;
}
printf("%s", buffer);
}
'strcat'のmanページに' The strings are overlapping'と表示されています。 'buffer'が十分に大きいことも確かですか? – mch
_ 7つのタブ、次に80文字、次に1行の改行などが表示されるはずです。 - 80文字(160文字)の16進表現** ** 40文字の16進表現出力のchars? – Sergio
私は40桁の16進数の文字を合計80文字と思います –