只是如果沒有事先想過和處理,
實作的時候就會弄出一大堆bug。
如果條件限定函式傳入char*,傳出也是char*,
但不可以覆蓋過原先傳入的值,就可以使用上一篇提到的malloc。
函式實作如下:
char* strReverse(char *s){ int len = 0; int i; char *ptr; ptr = s; while(ptr[len]!='\0') len++; printf("Total length: %d\n",len); ptr = (char *)malloc((len+1)*sizeof(char)); for(i=0;i<len;i++) ptr[i] = s[len-i-1]; ptr[len] = '\0'; return ptr; }
你可以用或者不用(char *)來指定malloc的東西,但主動寫出來cast會好一點。
常犯的錯誤會在:char array的結尾為'\0'。
由於是特殊字元,所以要加上"\"作為跳脫用。
且使用malloc()來宣告char array的時候,電腦不會好心幫你加上'\0'......
你要自己記得加,切記切記。
最後,用malloc()的話,記得自己要使用free()來釋放記憶體。
一個搭配主程式的範例如下:
int main(int argc, char *argv[]) { char str[50]; printf("Enter a string: "); scanf("%s", str); char* revPtr = strReverse(str); printf("After strReverse: %s\n",revPtr); free(revPtr); revPtr = 0; system("PAUSE"); return 0; }
沒有留言:
張貼留言