2011-09-21 4 views
-2

나는 다음과 같은 코드가 있습니다교체 바이트

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와 originalData의 마지막까지 위치 (6)에서 데이터를 교환 할을.

어떻게 C 코드로이 작업을 수행 할 수 있습니까?

+0

포인터 + 6을 사용하여 strcpy를 시도 했습니까? – sidyll

+1

즉, 44 바이트를 9 바이트로 대체하려고합니까? 'memset'은 어떻게해야하나요? 'strcpr'이'strcpy'가되어서는 안되는가? –

+0

'orginalData'가''12345111111117 "'이되기를 원하십니까? – pmg

답변

2
memcpy(originalData+6, replacingData, strlen(originalData)-6) 
는이 originalData 항상보다 큰 6 자이라는 가정을 만드는 것을 주목해야한다,하지만

것을 replacingData는 더 이상 originalData보다 짧은 6 자보다.

+0

'replacedData'는 9 바이트 길이이므로 'malloc' 버퍼의 끝을 넘어 읽고 UB를 발생시킵니다. –

+0

이 경우에는'strlen (originalData)'가 위의 예에서 13 자이므로'replacedData'에서 7 바이트를 복사합니다. 무엇이든 나는 본문에 담긴 경고 사항들로 덮여있다. 틀림없이 대답은 대단히 일반적이 아니지만 질문은 최종 목표를 거의 언급하지 않으므로 일반 목표로 일반화하기가 어렵습니다. –

+0

'replacedData'의 길이는 무엇을해야합니까? –