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

C語言轉義字元陷阱:路徑字串與 strlen 計算

     編輯:關於C語言

案例一:路徑字串被誤解析

#include <stdio.h>
int main() {
    printf("c:\\test\\add\\72_12\\test.c");
    return 0;
}

輸出結果

c:      estdd:_12     est.c

原因分析

序列轉義為原字串位置
\tTab (水平定位)\test 中的 \t
\a響鈴 (BEL)\add 中的 \a
\7八進位 \7 = BEL\72_12 中的 \7

其餘字元正常輸出,導致路徑變得面目全非。

正確寫法

  • 雙反斜槓:"c:\\test\\add\\72_12\\test.c"
  • 正斜槓 (跨平台相容):"c:/test/add/72_12/test.c"
  • C11 原始字串 (僅 C++11 支援 R"(...)",C 語言無此特性)。

案例二:strlen 計算含轉義字元的字串長度

#include <stdio.h>
#include <string.h>
int main() {
    // 實際記憶體中儲存的字元:c : \ t e s t \ a d d \ a _ 1 2 \ t e s t . c
    // 每個轉義序列佔 1 位元組
    printf("%zu\n", strlen("c:\\test\\add\\72_12\\test.c"));
    return 0;
}

輸出

19

長度拆解

c : \ t e s t \ a d d \ 7 2 _ 1 2 \ t e s t . c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

核心口訣

字串常數中,反斜槓啟動轉義;若要表達反斜槓本身,必須寫雙反斜槓 \\\\。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved