0

助けてください..なぜこの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);
}
4

1 に答える 1

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;
}
于 2013-05-10T19:52:29.983 に答える