You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含转义序列的字符串保留转义符原样写入文本文件?

解决转义字符可见化写入文件的问题

核心思路是遍历字符串时,对特殊转义字符做双字符替换——把单个转义字符(如'\n')拆成两个可见字符:反斜杠'\\'+对应标识字母(如'n'),普通字符直接写入文件即可。

具体实现示例(C语言)

#include <stdio.h>
#include <string.h>

void write_escaped_string(const char* str, FILE* fp) {
    while (*str != '\0') {
        switch (*str) {
            case '\n':
                fputc('\\', fp);
                fputc('n', fp);
                break;
            case '\t':
                fputc('\\', fp);
                fputc('t', fp);
                break;
            case '\\': // 原字符串中的单个反斜杠需转成两个可见反斜杠
                fputc('\\', fp);
                fputc('\\', fp);
                break;
            // 按需添加其他需要处理的转义字符,比如\r、\b等
            default:
                fputc(*str, fp);
                break;
        }
        str++;
    }
}

int main() {
    // 注意:原字符串中的单个\要写成\\,否则会被编译器当作转义前缀
    char* password = "this\nis\\myPassword";
    FILE* fp = fopen("output.txt", "w");
    if (fp != NULL) {
        write_escaped_string(password, fp);
        fclose(fp);
    }
    return 0;
}

优化点说明

  1. 抛弃全量转义数组方案:用switch-case只处理你实际需要的转义字符,比遍历大数组效率更高,代码也更简洁易维护。
  2. 原字符串反斜杠处理:定义字符串时,单个\必须写成\\(否则编译器会解析为转义前缀),写入时转成两个\\才能在文件中显示单个\。
  3. 内存高效:不需要额外创建临时字符串存储转换结果,边遍历边写入文件,节省内存开销。
  4. 扩展性强:如果需要支持更多转义字符,直接在switch中添加对应的case分支即可。

额外注意

你原代码中的"this\nis\myPassword"存在语法问题:\m不是合法转义序列,编译器会忽略反斜杠,直接把m当作普通字符。如果原意是字符串包含\m,必须写成"this\nis\\myPassword"。

内容的提问来源于stack exchange,提问作者Sahir Sood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:55:22