2012-03-31 6 views
-2

可能性の重複:
How to reverse a string in place in c using pointers?文字列を正しく逆にするには?

私はセグメンテーションフォールトが発生したC. を使用して文字列を逆にしようとしていました。どんな考え?あなただけのポインタを作った、STR2のための任意の領域を割り当てられていなかったよう

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

    int main(void) 
    { 
    char *str1 = "abbd"; 
    char *str2; 


    str2 = str2 + strlen(str1)-1; 

    while(*str1 != '\0') 
    *(str2--) = *(str1++); 


    printf("%s", str2); 

    return 0; 
    } 
+0

セグメンテーションフォルトを把握しても、文字列は変更されません。なぜあなたは理解できますか? – kindall

+0

誰もがあなたに指摘しているバグを修正しても、その文字列は変更不可能なため、文字列を変更することは不可能です。文字列リテラルは変更できません。 –

答えて

0

適切に割り当てられていません(宣言またはmallocで適切な長さを割り当ててください)。実際に文字列を移動せずに条件の終了をチェックしません(str [i]を試してください)。あなたはクラッケンを目覚めさせた。

0

が見える:

は、ここに私のコードです。

0
char *str2; 
str2 = str2 + strlen(str1)-1; 

あなたはポインタstr2を宣言したが、ゴミにその値を初期化します。 (str2 + ...

インプレース修正をしようとしていますか?これはこのコードでは機能しませんが、char *foo="bar";形式では、"bar"を、それをサポートするプラットフォーム上の書き込み禁止のメモリ空間に配置します。

アウトオブプレイス修正をしようとしていますか?もしそうなら、あなたはそのスペースを割り当てるのを忘れていました。

0

あなたはstr2のメモリを割り当てていません。

str2 = (char *)malloc(sizeof(char) * (strlen(str1) + 1)); 

私はそれを試していないが、あなたがSTR2 = STR2 + strlenを(STR1)を設定したいとしているように思えるが、そうでない場合、私はあなたのSTR2の「フロント」をオフに実行すると思いますバッファも同様に。

あなたの文字列を配列として扱い、コンパイラにあなたのためのポインタ演算をさせることをお勧めします。

関連する問題