char 배열이 함수로 전달되고 결과를 출력으로 쓰여진 문자열로 사용하여 C 코드를 유지 관리합니다. 그러나 함수에 의해 처리 된 후에 배열에 대해 수행 된 검사는 없으며 취할 수있는 최선의 방법이 무엇인지 궁금합니다.함수에서 돌아올 때 char []를 보호하는 최선의 방법은 무엇입니까?
한 가지 방법은 배열의 마지막 요소를 반환 한 후 \ 0으로 설정하는 것이지만 더 나은 방법이있을 것이라고 생각합니다.
void Unpack(char* inbuf, char* outbuf);
int main(int argc, char* argv[])
{
char* inData = "abc";
char outData[4];
char result[14];
Unpack(inData, outData);
outData[3] = '\0'; // Insert this to safeguard array before using as string.
_snprintf(result, sizeof(result), "blah %0s blah", outData);
printf(result);
return 0;
}
void Unpack(char* inbuf, char* outbuf) {
for(int index=0; index<3; index++) {
*outbuf++ = *inbuf++;
}
}
MarkusQ 잘되는 호출되는 함수에 버퍼 길이를 전달하는 것이 좋습니다. "감지", 즉 메모리 겹쳐 쓰기를 감지 했습니까? – jdigital
아니요. outData가 snprintf 호출에서 사용되면 예기치 않은 결과가 발생하지 않도록하는 데 더 관심이 있습니다. 언팩 기능이 제 통제에서 벗어났습니다. – sipwiz