2014-02-25 73 views
0

我有以下應該反轉2個字符串的程序。 例如: STR1 =一個 STR2 = B 結果:BAC中反轉2字符串

但是我有,我不能找到代碼一些bug,它不會允許該程序反轉字符串。有人可以看看這個嗎?你有

#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()不檢查字符串長度,但是你仍然在學習,這是以後的問題)。

您的追加函數將s2追加到s1,並且您打電話給append (str1, str2),所以您不會反轉字符串。改爲嘗試append (str2, str1)

+0

H,這工作,但沒有任何辦法做到這一點只修改功能? –

+0

當然。檢查你的循環並根據需要交換s1和s2,最後返回s2。 –