2012-01-24 8 views
0

만약 내가 C에서 2 문자열을 연결하려면, 나는 모든 문자열 또는 하나의 여분의 null을 할당해야하나요?얼마나 많은 null 바이트, C에서 문자열을 연결

int main(){ 
    char *s1 = NULL; 
    char *s2 = NULL; 
    char *s1_s2 = NULL; 

    s1 = malloc(sizeof(char) * strlen("string1") + 1); 
    strcpy(s1, "string1"); 
    s2 = malloc(sizeof(char) * strlen("string2") + 1); 
    strcpy(s2, "string2"); 

    s1_s2 = malloc(sizeof(char) * (strlen(s1) + strlen(s2)) + 2); // shouldn't it be only 1 null char ? 
    strcpy(s1_s2, s1); 
    strcat(s1_s2, s2); 
} 

this 질문에, 그들은 각각의 문자열이 널 (null) 바이트를 사용합니다. 어떤 사람이 빛을 비춰 줄 수 있습니까? 감사합니다.

+0

문자열 터미네이터가 하나뿐이므로 모든 문자열에는 한 개의 추가 바이트 만 필요합니다. 당신의 예제에서's1_s2'도 마찬가지입니다. –

+0

좋습니다. 알겠습니다. 감사! –

답변

2

하나만 필요합니다.

당신이 링크 한 질문에서 실제로 추가 바이트가 필요한 여분의 공백 문자가 추가됩니다.

1

마지막 문자열은 null 바이트로 끝나야 만 하나이면 충분합니다.

편집 : 보내 주신 질문은 두 개의 문자열 사이에 공백이 있습니다.

strcpy(both, first); 
strcat(both, " "); 
strcat(both, second); 
1

하나만 필요합니다. 문자열 끝에는 항상 하나의 null 문자가 필요합니다. 여기에는 두 문자열의 연결이 있습니다.

3

아니요, 두 개의 추가 null 바이트가 필요하지 않습니다.

메모리, 귀하의 문자열과 같이 표시됩니다 : 당신이 링크 된 질문에

s1 -> 's' 't' 'r' 'i' 'n' 'g' '1' '\0' 

s2 -> 's' 't' 'r' 'i' 'n' 'g' '2' '\0' 

s1_s2 -> 's' 't' 'r' 'i' 'n' 'g' '1' 's' 't' 'r' 'i' 'n' 'g' '2' '\0' 
1

, 공간이 함께 연결된다 문자열 사이에 배치됩니다. 이 공간에는 여분의 char을 할당해야합니다.

예에서 문자열 사이에 공백을 넣지 않으므로 추가로 char이 하나만 필요합니다.