将char数组写入文件,使用相应的文字写入转义字符

时间:2012-07-19 19:44:20

标签: c++

我正在尝试将一个char数组写入文件,转义的字符应该用它们的等效文字写出来(例如换行应该写成'\ n'而不是文件中的实际换行符。)

如果数组是char *arr = "hello world\n"; 我的代码应该写

char tempArr[100] ={'h','e','l','l','o','\s','w','o','r','l','d','\n'};

到文件。

有没有办法在C ++中实现这个目标?

3 个答案:

答案 0 :(得分:0)

您可以同时拥有'\n''\\',而不是将'n'作为您的某个角色。

要明确,我的意思是您将'\\''n'放在数组中。这样,就会打印'\''n'

答案 1 :(得分:0)

是的,这是一个C解决方案:

void printAndEscapeString(const char *input, FILE *output)
{
    const char escapeCodes[] = {
        '\n',
        '\t',
        '\v',
        '\'',
        '\"',
        '\?',
        '\a',
        '\b',
        '\f',
        '\r',
    };

    const char escapeReplacements[] = {
        'n',
        't',
        'v',
        '\'',
        '\"',
        '?',
        'a',
        'b',
        'f',
        'r',
    };

    while (*input) {
        for (int i = 0; i < sizeof(escapeCodes); i++) {
            if (*input == escapeCodes[i])
            {
                putc('\\', output);
                putc(escapeReplacements[i], output);

                goto NEXT; // use goto because I'm too lazy to figure out a better way
            }
        }

        fputc(*input, output);

    NEXT:
        input++;
    }
}

答案 2 :(得分:0)

嗯,我知道在标准C中这样做的方法。

FILE *fp;

int check = 0;

fp = fopen("output.txt", "w");
fprintf(fp, "%s", "char tempArr[100] = {");
for (i = 0; arr[i]; i++)
{
    if (i)
        fputc(',', fp);
    check += 4;
    fputc('\'', fp);
    switch(arr[i])
    {
        case '\n':
            check++;
            fputc('\\', fp);
            fputc('n', fp);
            break;
        // ...
        default:
            fputc(arr[i], fp);
    }
}
fprintf(fp, "%s", "};\n");
if (check >= 100)
    fprintf(stderr, "WARNING: tempArr contains MORE than 100 characters!\n");