. 주된 관심사는 tempPrefix
에 접두어 + 원래 문자를위한 충분한 공간이 있어야한다는 것입니다. C 문자열은 null로 끝나야하기 때문에 함수는 28자를 초과하는 접두어를 복사해서는 안됩니다. 30 (버퍼의 크기) - 1 (루트 레이블 문자) -1 (종료 널 문자). 다행히 표준 라이브러리는 strncpy
이 있습니다
size_t const buffer_size = sizeof tempPrefix; // Only because tempPrefix is declared an array of characters in scope.
strncpy(tempPrefix, prefix, buffer_size - 3);
tempPrefix[buffer_size - 2] = root->label;
tempPrefix[buffer_size - 1] = '\0';
따라서 그것은 당신이 최소한의 변화의 크기를 증가 할 수 있도록 하드 코드하지 또한 함수 호출에서 버퍼 크기 보람입니다.
버퍼가 정확하지 않은 경우 약간의 다리 작업이 필요합니다. 이 방법은 이전과 거의 비슷하지만 그림을 완성하려면 strchr
으로 전화해야합니다.
size_t const buffer_size = sizeof tempPrefix; // Only because tempPrefix is declared an array of characters in scope.
strncpy(tempPrefix, prefix, buffer_size - 3);
tempPrefix[buffer_size - 2] = tempPrefix[buffer_size - 1] = '\0';
*strchr(tempPrefix, '\0') = root->label;
우리는 다시 최대 28자를 복사합니다. 그러나 명시 적으로 NUL 바이트로 끝을 덧대십시오. 이제 strncpy
은 복사 할 문자열이 더 짧을 경우를 대비하여 최대 Null 바이트 인 count
으로 채 웁니다. 따라서 실제로 복사 된 접두사 이후의 모든 문자는 \0
입니다. 이것이 내가 바로 strchr
의 결과를 존중하는 이유이며, 유효한 문자를 가리키는 것이 보장됩니다. 정확한 첫 번째 여유 공간.
[C의 연결 문자 배열] 가능한 복제본 (http://stackoverflow.com/questions/2128290/concatenate-char-array-in-c) –
은 이전 질문과 내 차이점을 설명했습니다. –
에 오신 것을 환영합니다. 스택 오버플로! 지금까지 연구/디버깅 노력을 보여주십시오. 먼저 [Ask] 페이지를 읽으십시오. –