只是如果沒有事先想過和處理,
實作的時候就會弄出一大堆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;
}
沒有留言:
張貼留言