2013-05-10 154 views
0

幫我..爲什麼這個C程序不反轉字符串? 崩潰......但是當我使用的字符數組的代碼似乎工作fine..but我使用一個指向string..its給人心潮起伏的那一刻......幫我解決這個..C反轉字符串

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 

int main(){ 

    char *String="gokul"; 
    char *Begin =String; 
    char *End = String + strlen(String) - 1; 
    char TempChar = '\0'; 

    while (Begin < End) 
    { 
     TempChar = *Begin; 
     *Begin = *End; 
     *End = TempChar; 
     Begin++; 
     End--; 
    } 
    puts(String); 
} 
+0

爲什麼不使用'strcmp'? – 2013-05-10 19:54:38

+3

strcmp()會有什麼用處?他沒有比較任何東西,他試圖模仿strrev()(這仍然不行,因爲他的字符串是一個常量)。 – 2013-05-10 20:00:26

+0

@LeeDanielCrocker:你知道'strcmp'是如何工作的嗎?看到這裏:http://www.tutorialspoint.com/ansi_c/c_strcmp.htm和OP的while循環 – 2013-05-10 20:02:04

回答

4

問題是String指向一個字符串,它在只讀存儲器中。您仍然可以使用指針String,但它必須指向可修改的內存。

char gokul[] = "gokul"; 
char *String = gokul; 

編輯解決一些小問題。

有沒有必要在您的程序中包含非標準標頭conio.h

您的代碼不處理String爲NULL的情況。

如果String是空字符串,則您的循環在技術上不正確,因爲End會指向該字符串。

main()應該返回一個值,因爲它被聲明爲這樣。 0表示成功。較新的C編譯器會知道最新的C標準允許程序在main()的末尾執行,而不返回意味着爲您隱式返回0的結果。

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

int main(){ 

    char gokul[] = "gokul";  
    char *String=gokul; 

    if (String && *String) { 
     char *Begin =String; 
     char *End = String + strlen(String) - 1; 
     char TempChar = '\0'; 

     while (Begin < End) 
     { 
      TempChar = *Begin; 
      *Begin = *End; 
      *End = TempChar; 
      Begin++; 
      End--; 
     } 
     puts(String); 
    } 
    return 0; 
} 
+0

這真的和他的問題無關,我想你完全錯過了這個問題。 – 2013-05-10 19:56:13

+2

@ 0A0D:怎麼樣? Poster說:當我爲'String'使用一個數組的時候工作,當'String'是一個指針時失敗。他/她正試圖反轉'String'。 – jxh 2013-05-10 19:57:23

+0

因爲它的答案不完整,並沒有解決他的程序中的多個問題。是的,char *'是隻讀的,但這裏還有更多。 – 2013-05-10 19:59:33