2014-02-25 7 views
0

2 개의 문자열을 뒤집을 다음 프로그램이 있습니다. 예 : (PS)와 복수의 랜덤은 (PS)와 복수의 랜덤 = B 결과 = : 바C에서 2 개의 문자열 반전

그러나 내가 찾을 수없는 코드에서 몇 가지 버그를 가지고이 프로그램은 문자열을 반전 할 수 없습니다. 누군가 이것에 대해 살펴볼 수 있습니까? 당신이

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

/* 
    Return the result of appending the characters in s2 to s1. 
    Assumption: enough space has been allocated for s1 to store the extra 
    characters. 
*/ 
char* append (char s1[ ], char s2[ ]) { 
    int s1len = strlen (s1); 
    int s2len = strlen (s2); 
    int k; 
    for (k=0; k<s2len; k++) { 
     s1[k+s1len] = s2[k]; 
    } 
    s1[k+s1len]='\0'; 
    return s1; 
} 

int main () { 
    char str1[10]; 
    char str2[10]; 
    while (1) { 
     printf ("str1 = "); 
     if (!gets (str1)) { 
      return 0; 
     }; 
     printf ("str2 = "); 
     if (!gets (str2)) { 
      return 0; 
     }; 
     printf ("The result of appending str2 to str1 is %s.\n", 
      append (str1, str2)); 
    } 
    return 0; 
} 
+4

어떻게 코드가 문자열을 뒤집어 씌우려는 것입니까? 함수 이름조차도 그것이하는 일을 - 추가합니다. –

답변

2

하나의 문제는 문자열 매우 짧은으로 버퍼 오버 플로우입니다; 결과 문자열이 10 바이트보다 길면 문자열 배열이 오버플로됩니다. 적어도 80 바이트 또는 그와 비슷한 것으로 만드십시오.

(gets()gets()에서 문자열 길이를 확인하지 않기 때문에 배우지 만 나중에 문제가 될 수 있습니다.)

추가 기능은 s1에 s2를 추가하고 append (str1, str2)을 호출하므로 문자열을 반전하지 않습니다. 대신 append (str2, str1)을 시도하십시오.

+0

H, 그게 효과가 있었지만,이 기능을 수정하여이 작업을 수행 할 수있는 방법이 없습니까? –

+0

예. 루프를 확인하고 s1과 s2를 적절하게 교환 한 다음 끝에 s2를 리턴하십시오. –