替换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:“最有可能”,是的,但程序也可能出错。