2017-09-14 2 views
-1

내가 해석 할 수있는 방법이 : var_ptr_char + 나 strlen (var_ptr_char) C 코드의 후속 작품에 :나는이 해석 할 수있는 방법의 sprintf를 (var_ptr_char + 나 strlen (var_ptr_char) ... C 코드

#define INT_CONSTANT 80 
char var_ptr_char[1024]; 
strcat(var_ptr_char,"SOMETHING"); 
sprintf(var_ptr_char+strlen(var_ptr_char),":%d",INT_CONSTANT); 

얼마나 크기는 내가 현재 snprintf에 의해 sprintf를 변경하기 위해 둘 것이다.

감사합니다!

+0

이 코드가 실제 코드입니까? 정의되지 않은 동작입니다. 만약 당신이 그것을 모르는 경우, 나는 [tag : c-strings]이 무엇인지, 그리고'strcat()'가 어떻게 작동하는지, 그리고'sprintf()'는 무엇인지에 관해 읽을 것을 제안합니다. –

+0

'sprintf (var_ptr_char, "% s : % d", "SOMETHING", INT_CONSTANT); 대신에. – BLUEPIXY

답변

0

sprintf의 첫 번째 인수 인 char 포인터를 (즉 char 버퍼.) 함수는 해당 버퍼에서 "인쇄"하고 포인터가 가리키는 위치에서 시작합니다.

포인터에 N을 추가하는 것은 N 번째 위치를 가리키는 것을 의미합니다. 따라서 strlen(var_ptr_char)var_ptr_char에 추가하면 효과적으로 포인터를 버퍼의 마지막 문자로 전달합니다 (이미 유효한 문자열이 포함되었다고 가정).

snprintf 호출은 다음과 같이 될 수있다 :

snprintf(var_ptr_char + strlen(var_ptr_char), 1024 - strlen(var_ptr_char) - 1, ":%d", INT_CONSTANT); 

TL; DR : 그것은 var_ptr_char에 이미 저장된 문자열의 끝에 문자열을 추가한다.

+0

이 경우에는'var_ptr_char'는 확실히 문자열을 포함하지 않습니다. – chux

+0

맞아, 그렇지 않을 수도 있습니다. 그러나 코드 발췌 (줄의 불완전한 콜렉션 인 것처럼 보임)에 의해,'var_ptr_char'는'sprintf' 호출 전에'SOMETHING'으로 끝나는 유효한 길이의 유효한 문자열을 이미 포함하고 있다고 가정합니다. –

관련 문제