2013-03-23 78 views
1

這是一個返回反轉字符串的代碼,例如「ABC」返回「CBA」,但它返回此「CBA =」「」「」「」「」「」*「。 有什麼不對?此反轉字符串代碼(C)有什麼問題

char* inv(char* C) 
{ 
    int lenght = strLenght(C)-1; 
    int idx=0; 

    char* tempStr = (char*)malloc(lenght+2); 
    for (;lenght>=0;lenght--,idx++) 
    { 
     tempStr[idx] = C[lenght]; 
    } 
    return tempStr; 
} 
int strLenght(char* str) 
{ 
    int lenght=0; 
    while(str[lenght] != '\0') 
     lenght++; 
    return lenght; 
} 

int main(int argc, char *argv[]) 
{ 
    char* st= "ABC"; 
    char* sr = inv(st); 
    printf("%s",sr); 
} 
+0

我剛剛在'MinGW'上試過了你的程序,它工作的很好,即我觀察'CBA'作爲輸出。 – Ganesh 2013-03-23 16:26:24

+0

@Ganesh你很幸運,並且在內存中的字符串旁邊有一個''\ 0''。 – 2013-03-23 16:27:14

+0

謝謝你,應該在回答這個問題上發帖,我現在覺得很愚蠢。 – 2013-03-23 16:27:21

回答

4

您的tempStr不是空終止。另外strlen()是一個集成的函數,你不必自己寫。

1

像評論說我錯過了'\ 0',謝謝。

+0

Armin在其他人做過之前發佈了正確答案。我認爲如果你還沒有接受他的答案並且贊同它,那將是很好的。 – 2013-03-23 16:36:27

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

void reverse(char *des, char *src) 
{ 
    int len = strlen(src) + 1;  //strlen() can't calculate the '\0' 
    int i, j; 
    for (i = 0, j = strlen(src) - 1; 
     i < len; i++, j--) { 
     des[i] = src[j]; 
    } 
    des[i] = '\0';  //important!! 
} 
int main(int argc, char *argv[]) 
{ 
    char* st= "ABC"; 
    char sr[strlen(st) + 1]; 
    reverse(sr, st); 
    printf("%s",sr); 
} 
+0

我的代碼如何? – longdeqidao 2013-03-23 16:44:54

+0

它不適合我所需要的,所以我不能使用它,但代碼本身看起來不錯。 – 2013-03-25 18:02:56

+0

是的,不同的API需要不同的算法。 – longdeqidao 2013-03-26 14:40:53