文字列反転によるchar str[]=「abc」とchar*str=「abc」思考

2723 ワード

メモリ領域を分割せずに文字列反転関数を書き、ポインタの先頭と末尾の交換で反転を完了します.コードは次のとおりです.
#include 
#include 

char *reverseString(char *str){
    char *start=str;
    char *end=start+strlen(str)-1;
    char temp;

    while(start < end)
    {
        temp=*start;
        *start=*end;
        *end=temp;

        start++;
        end--;
    }
    return str;
}

void PRINT(char *str){
    int i=0;
    while(*str != '\0')
    {
        printf("%c",*str++);
    }
    printf("
"
); } int main(){ char *Pstr="can i help you!"; //char str[]="can i help you!"; //char *Pstr=str; char *strTemp; PRINT(Pstr); strTemp=reverseString(Pstr); PRINT(strTemp); return 0; }

コンパイル大丈夫、実行時プロンプト
can i help you!
Segmentation fault (core dumped)

gdbデバッグでこの行に問題が発生したことがわかりました
*start=*end;

原因分析:
char *Pstr="can i help you!";

この声明では、「can i help you!」静的データ領域に格納され、グローバルであり、pはポインタ(スタックメモリに格納されている)にすぎず、この領域に値を付与しようとする操作は不正である.
推奨方法:
const char *Pstr="can i help you!";

constを追加して宣言を表示
推荐阅读:char*p="abc"とchar p[]="abc"の区别関数の戻り値-ローカル変数の内容を返す