構造体の一部を16進値で連結しようとしています。私はループのすべてのバイトを実行し、16進数に変換し、その後、1つの長い文字列にすべての16進数を連結したい。C whileループで文字列を連結します。
しかし、ループの最後には1つの値しかありません。何らかの理由で、文字列が正しく連結されていません。私は間違って何を考えている?
typedef struct OPTIONS_STR
{
int max;
int printName;
} OPTIONS;
void set_default_options(OPTIONS *options)
{
options->max = -1;
options->printName = 0;
}
void do_file(FILE *in, FILE *out, OPTIONS *options)
{
char ch;
int loop = 0;
char buf[81];
buf[0] = '\0';
int sz1;
int sz2;
int 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);
//set seek location at beginning of struct offset
fseek(in, seeker, SEEK_SET);
sz3 = sz2 + 1;
char buffer[sz3];
char msg[sz3];
buffer[0] = '\0';
while (loop < sz2)
{
if (loop == sz2)
{
break;
}
fread(&ch, 1, 1, in);
sprintf(msg, "%02X", (ch & 0x00FF));
strcpy(buffer, msg);
++loop;
}
printf("%s\n", buffer);
}
int main(int argc, const char * argv[]) {
OPTIONS options;
set_default_options(&options);
const char *current = "/myfile.txt";
FILE *f = fopen(current, "rb");
do_file(f, stdout, &options);
fclose(f);
};
strcpy()は、ソース文字列を宛先文字列にコピーして前の内容を上書きします。代わりに 'strcat()'が必要でしょう。 –
'int index = 0; index + = sprintf(&buffer [index]、 "%02X"、(ch&0x00FF)); ' – LPs
あなたもバッファを十分に大きくしていないことに注意してください。各入力文字はバッファ内に2桁の16進数を必要としますが、1つの入力文字には十分なスペースしかありません。 –