首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 庫函數詳解:strrev — 字符串反轉

     編輯:關於C語言

函數原型

char *strrev(char *s);

所需頭文件

#include <string.h>

注意:strrev 同樣非 ANSI/ISO C 標準,屬於 Microsoft / Borland 擴展。標準 C 無直接對應函數,需自行實現。

功能描述

將字符串 s 中的所有字符順序顛倒(不包括結束符 \0)。操作原地進行,直接修改傳入緩衝區。

返回值

返回指向反轉後字符串(即原緩衝區)的指針。

示例代碼


// strrev.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h> // for strdup

int main() {
    char *s = "Welcome To Beijing";
    // strdup 分配副本,避免修改常量區導致崩潰
    char *dup = strdup(s);

    printf("原始: %s\n", s);
    printf("反轉: %s\n", strrev(dup)); // gnijiB oT emocleW

    free(dup);
    return 0;
}

關鍵注意事項

  1. 不可用於字符串常量:strrev("abc") 必崩。必須傳入可修改的緩衝區(數組、malloc/strdup 分配的內存)。
  2. 非標準:跨平台請自行實現。
  3. 多字節字符集 (MBCS/UTF-8) 破壞性:逐字節反轉會破壞多字節字符編碼,導致亂碼。處理 Unicode 需用寬字符版 _wcsrev 或 ICU 庫。

標準 C 實現參考


#include <string.h>

void my_strrev(char *s) {
    if (!s) return;
    char *start = s;
    char *end = s + strlen(s) - 1;
    while (start < end) {
        char tmp = *start;
        *start++ = *end;
        *end-- = tmp;
    }
}

相關函數

無直接標準對應。C++ 可用 std::reverse(s.begin(), s.end())。

總結

strrev 是快速反轉字符串的非標準工具,使用時務必注意緩衝區可寫性與字符編碼兼容性。通用代碼請採用雙指針交換循環自行實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved