2014-09-26 6 views
2
여기

내 프로그램입니다 : - :strcat가 C에서 빈 문자열로 작동하지 않는 이유는 무엇입니까?

The String is=> World!! 

왜 처음 strcat와 작동하지 않습니다 있지만에서 제대로 작동하고 - 내가 GCC 버전 4.8.3로 컴파일하고 다음과 같은 출력을 가지고

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main(void) 
{ 
    char arrcTest[256] = {0}; 
    strcat(arrcTest,"Hello"); 
    sprintf(arrcTest,"%s","World"); 
    strcat(arrcTest,"!!"); 
    printf("The String is=> %s\n",arrcTest); 
    return 0; 
} 

두 번째로?

+5

왜냐하면'sprintf (arrcTest, "% s", "World")가'arrcTest'을 덮어 쓰기 때문입니다. – haccks

+3

당신은'sprintf (arrcTest, "% s", "World");에 의해'Hello'를 덮어 씁니다. – HuStmpHrrr

+1

당신은 sprintf를 사용하지 마십시오. snprintf, sprintf_s 또는 이와 동등한 것을 사용하여 실수로 버퍼 오버런을 방지하십시오. – skimon

답변

1

sprintfstrcat와 동일하지 않습니다. sprintf은 문자열을 포맷하고 버퍼의 시작 부분에 놓습니다. 반면에 strcat은 문자열을 버퍼 끝에 추가합니다.

strcat(arrcTest,"Hello"); /* after this statement you have "Hello" in arrcTest */ 
sprintf(arrcTest,"%s","World"); /* after this statement you have "World" in arrcTest */ 
strcat(arrcTest,"!!"); /* after this statement you have "World!!" in arrcTest */ 
3

이 문장은 완전히 처음 strcat와 덮어 쓰기됩니다 :

sprintf(arrcTest,"%s","World"); 
1

첫 번째 strcat이 작동 중입니다. 당신 만이 당신이 strcat와의 첫 번째 결과는 다음 덮어 쓸 것을 원하지 않는 경우

sprintf(arrcTest,"%s","World"); 

당신이 다른 방법은

sprintf(arrcTest + strlen(arrcTest)," %s","World"); 

을 작성할 수 있습니다 다음 문장에서 그것을 덮어

int main(void) 
{ 
    char arrcTest[256] = {0}; 
    strcat(arrcTest,"Hello"); 
    strcat(arrcTest, " World"); 
    strcat(arrcTest,"!!"); 
    printf("The String is=> %s\n",arrcTest); 
    return 0; 
} 

또는

int main(void) 
{ 
    char arrcTest[256] = {0}; 
    sprintf(arrcTest,"%s %s%s", "Hello", "World", "!!"); 
    printf("The String is=> %s\n",arrcTest); 
    return 0; 
}