Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换C数据中的字节_C - Fatal编程技术网

替换C数据中的字节

替换C数据中的字节,c,C,我有以下代码: unsigned char* originaldata = (unsigned char*)malloc(50); strcpy((char*)originalData,"12345 7"); unsigned char* replacingData = (unsigned char*)malloc(9); strcpr((char*)replacingData,"11111111"); memset(replacingData,6,6); 然后,我想用repl

我有以下代码:

unsigned char* originaldata = (unsigned char*)malloc(50);
strcpy((char*)originalData,"12345       7");

unsigned char* replacingData = (unsigned char*)malloc(9);
strcpr((char*)replacingData,"11111111");

memset(replacingData,6,6);
然后,我想用replacingData替换从位置6到原始数据末尾的数据

在C代码中如何实现这一点

memcpy(originalData+6, replacingData, strlen(originalData)-6)

尽管如此,应该注意的是,这使得假设
originalData
的长度始终大于6个字符,并且
replacingData
的长度比
originalData

短6个字符。您是否尝试过使用指针+6的strcpy?也就是说,您试图用9个字节替换44个字节?
memset
应该做什么?而且
strcpr
不应该是
strcpy
?您希望
orginalData
变成
“12345111111117”
?您的replacingData包含相同的重复字符,或者它可以有任何字符串?如果它的重复y不只是作为单字符数据。由于
replacingData
的长度为9字节,因此读取超出
malloc
'd缓冲区的末尾,并导致UB。在这种情况下,不是因为
strlen(originalData)
在上面所示的示例中是13个字符,这意味着它从
replacingData
复制了7个字节。我在文中提出的注意事项涵盖了任何进一步的内容。诚然,答案并不是非常笼统,但是这个问题很少涉及最终目标,因此很难从中概括出来。
replacingData
的长度与此有什么关系?正如拉斯曼所说的那样,如果
replacingData
太短,你会复制到它的末尾,并导致未定义的行为(说什么都有可能发生,很可能垃圾会被复制到
原始数据中)对不起,我错过了
strlen
调用。@CharlesKeepax:“最有可能”,是的,但程序也可能出错。