2014-10-28 52 views
-1

我已經編寫了以下代碼來反轉字符串。但它給出了一些錯誤。它在調用reverseStr()函數後卡住了。我無法找到該錯誤。有人能幫我嗎?在C程序中查找錯誤以反轉字符串

#include <stdio.h> 
#include <stdlib.h> 
char * reverseStr(char *str){ 
    int i,len = 0; 
    while(str[len]!=NULL){ 
     len++;   
    } 
    len-=1;char temp; 
    for(i=0;i<len/2;i++){ 
     //printf("%d %d %s\n",i,len,str); 
     temp = str[len-i]; 
     str[len-i]=str[i]; 
     str[i]=temp; 
     //printf("%d %d %s\n",i,len,str); 
    } 
    return str; 
} 

int main(void) { 
    char *str = "abcdefg"; 

    printf("Original :: %s\n",str); 
    str = reverseStr(str); 
    printf("Reversed :: %s",str); 

    return 0; 
} 
+2

使用您的調試器! – 2014-10-28 03:56:07

+0

編譯所有警告和調試信息('gcc -Wall -Wextra -g')。然後**使用調試器**('gdb') – 2014-10-28 03:56:10

+0

@ mav3n如果您取消註釋'for'循環中的'printf',它們是否打印出任何內容? – SSC 2014-10-28 04:09:29

回答

1

至於如果你改變*海峽到STR [1]它會工作,也沒有必要返回一個字符串,因爲您是按引用傳遞這樣的變化將在其作出建議的P0W。以下是代碼:

#include <stdio.h> 
#include <stdlib.h> 
void reverseStr(char *str){ 
    int i,len = 0; 
    while(str[len]!=NULL){ 
     len++; 
    } 
    len-=1;char temp; 
    for(i=0;i<len/2+len%2;i++){ 
     //printf("%d %d %s\n",i,len,str); 
     temp = str[len-i]; 
     str[len-i]=str[i]; 
     str[i]=temp; 
     //printf("%d %d %s\n",i,len,str); 
    } 
} 

int main(void) { 
    char str[] = "abcdefg"; 

    printf("Original :: %s\n",str); 
    reverseStr(str); 
    printf("Reversed :: %s",str); 

    return 0; 
} 
3
char *str = "abcdefg"; 

將會把字符串常量「ABCDEFG」在內存的只讀部分,使str爲指向,在這個存儲器中的任何寫入操作違法,因此運行時錯誤。

使用char str[] = "abcdefg" ;,只是reverseStr(str);

現在你不能做str = reverseStr(str) ;在這裏,因爲類型不同,你可以儘管結果存儲在另一個字符指針。

+0

它現在工作。謝謝@ P0W – 2014-10-28 04:47:35

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

void reverseStr(char *str){ 
    int i,len; 
    len = strlen(str); 
    char temp1,temp2; 
    int j = len - 1; 
    for(i=0;i<j/2 + j%2;i++){ 
     printf("%d %d %s\n",i,j,str); 
     temp1 = str[j-i]; 
     temp2 = str[i]; 
     str[i]=temp1; 
     str[j-i]=temp2; 
     printf("%d %d %s\n",i,j,str); 
    } 
    return; 
} 

int main(void) { 
    char str[10]; 
    strcpy(str,"abcdefgh"); 

    printf("Original :: %s\n",str); 
    reverseStr(str); 
    printf("Reversed :: %s",str); 

    return 0; 
} 
+0

感謝您的正確實施。 – 2014-10-28 04:43:32