首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言字符串反轉:字面量不可修改陷阱

     編輯:程式設計綜合問答

錯誤代碼

char *s = "abcdefg";
reverse(s); // 嘗試原地修改

void reverse(char *s) {
    char *end = s;
    while(*end) end++;
    end--;
    while(s < end) {
        char temp = *s;
        *s++ = *end;
        *end-- = temp;
    }
}

問題本質

char *s = "abcdefg"; 使 s 指向只讀數據段中的字符串字面量,任何嘗試修改的操作(如 *s = ...)均導致未定義行為(通常是段錯誤)。

正確寫法

// 方法一:字符數組(棧上分配,可修改)
char s[] = "abcdefg";
reverse(s);

// 方法二:動態分配
char *s = strdup("abcdefg"); // 需 free
reverse(s);
free(s);

補充:標準庫替代

C 標準庫無 strrev,但可用 std::reverse(C++)或自寫通用版本:

void reverse(char *str) {
    if (!str) return;
    char *end = str + strlen(str) - 1;
    while (str < end) {
        char tmp = *str;
        *str++ = *end;
        *end-- = tmp;
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved