2013-09-05 2 views
1

두 문자열을 연결하는 코드는 다음과 같습니다. 처음에는 조건이 작동하지만 for 루프에서는 두 번째 것이 실패합니다. 나는 아래 입력들과 함께 그들을 독립적으로 운영했다.두 문자열을 C 언어로 연결하는 방법

int original[100]="c" , add[50] = "pgm"; 
concatenate_string(original, add); 
printf("String after concatenation is \"%s\"\n", original); 
//strcat(original,add); 
//printf("strcat is : %s",original); 


void concatenate_string(char *original, char *add) 
    { 
     while(*original) 
      original++; 

     while(*add) 
     { 
      *original = *add; 
      add++; 
      original++; 
     } 
     *original = '\0'; 
    } 

void strcat(char *original,char *add) 
{ 
    for (;*original++;); 
    for (;*add;) 
     *original++=*add++; 
    *(original)='\0'; 

} 
+0

참고 : 피할 수'* (원본) = '\ 0'; '두 번째 함수에서 가리키고 그냥 쓸 수 있습니다 :'에 대한 (* 원래 ++ = * ++ 추가)' –

+0

두 번째 버전 사용 그런데 예약 된 이름. 사용자 정의 함수 이름은'str'로 시작할 수 없습니다. – unwind

답변

2

두 번째 버전은 두 번째 루프가 시작되기 전에 추가 ++을 수행합니다. 두 루프 사이에 --original;을 추가하거나 두 번째 루프의 초기화로 시도하십시오.

7

때문에 두 번째 코드에서, 당신은 NUL \0 기호 다음 문자열을 추가됩니다

for (;*original++;); 
     ^always increments, even after nul found 

가 있어야한다 :

for (;*original; original++); 

참고 : 코드에 대한

:

for (;*original++;); 

while (*original++); 

하지만 사용하지 것과 동일합니다.

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

void string_add(char *original,char *add) { 
    int i = 0,j,length = 0; 
    i = strlen(original); 
    length = strlen(add); 
    for(j = 0; j<length; j++,i++) 
     original[i] = add[j]; 
} 

int main() 
{ 
    char original[20] = "I am from ", add[10] = "india"; 
    string_add(original, add); 
    printf("Concatinated : %s\n",original); 
    return 0; 
} 
관련 문제