这只是大型项目的一小部分......
这些是在项目的标准头文件中定义的typedef。
typedef uint16_t u_int16_t;
typedef uint32_t u_int32_t;
typedef uint8_t u_int8_t;
现在这是造成问题的实际功能......
void function(u_int8_t *data1, u_int32_t data1len,
u_int8_t *data2, u_int32_t data2len)
{
FILE *fq,*fr,*fs;
char *data3;
int data3len;
data3len=data1len+data2len;
printf("\n%d",data1len);
printf("\n%d",data2len);
printf("\n%d",data3len);
fq=fopen("data1.txt","wb");
fwrite((char *)data1,data1len,1,fq);
fr=fopen("data2.txt","wb");
fwrite((char *)data2,data2len,1,fr);
data3=(char *)data1;
strcat(data3,(char *)data2);
fs=fopen("data3.txt","wb");
fwrite((char *)data3,data3len,1,fs);
}
一些输出快照...
40
14
54
udit@udit-Dabba ~$ hexdump -C data1.txt
00000000 60 00 00 00 00 8c 06 00 00 00 00 00 00 00 00 00 |`...............|
00000010 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 02 |........|
00000028
udit@udit-Dabba ~$ hexdump -C data2.txt
00000000 00 26 00 26 00 00 00 01 00 00 00 02 34 12 00 65 |.&.&........4..e|
00000010 00 34 00 00 61 62 63 64 |.4..abcd|
00000018
udit@udit-Dabba ~$ hexdump -C data3.txt
00000000 60 00 00 00 00 8c 06 00 00 00 00 00 00 00 00 00 |`...............|
00000010 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 02 00 78 f8 65 00 00 00 02 |.........x.e....|
00000030 f4 1f 96 00 18 34 a6 bf 1c 03 96 00 88 f1 90 08 |.....4..........|
00000040
为什么data2.txt的内容不会复制到data3.txt ???如果还有其他可能的方式请告诉我!!!! Thanx提前...
答案 0 :(得分:3)
为什么data2.txt的内容不会复制到data3.txt?
strcat
专门用于连接C字符串,仅复制到空终止符字符。因此,一旦遇到它认为字符串结束的00,它就会停止从源中复制。注意data2如何以00开头,因此它会立即停止。
您需要memcpy,目的地在data3
的最后一个字节之后为1且来源为data2
。如果data3
(真正data1
)没有足够的空间来容纳data2
,您还需要优雅地失败。
答案 1 :(得分:2)
我认为你可以更轻松地做到这一点,从而避免确保相应的内存块足够大。
void function(u_int8_t *data1, u_int32_t data1len,
u_int8_t *data2, u_int32_t data2len)
{
FILE *fq,*fr,*fs;
char *data3;
fq=fopen("data1.txt","wb");
fwrite((char *)data1, data1len, 1, fq);
fclose(fq);
fr=fopen("data2.txt","wb");
fwrite((char *)data2, data2len, 1, fr);
fclose(fr);
fs=fopen("data3.txt","wb");
fwrite((char *)data1, data1len, 1, fs);
fwrite((char *)data2, data2len, 1, fs);
fclose(fs);
}
答案 2 :(得分:0)
您尝试将data2附加到data1的末尾。 您打算将结果放入第三个字符串(data3),但实际上data3只是data1;他们指向同一个位置。 您的代码等同于
strcat (data1, data2);
当然写入数据1的结尾。 (还有另一个问题:如果函数的调用者使用“string_literal”作为参数#1, data1将不可写。 )
您可能必须为结果字符串分配一些内存并为其创建点数据。