0

我正在尝试将 char 数组写入文件,转义字符应使用其等效文字写入(例如,换行符应写为 '\n' 而不是文件中的实际换行符)。

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

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

到文件。

有什么方法可以在 C++ 中实现这一点吗?

4

3 回答 3

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++;
    }
}
于 2012-07-19T19:51:12.840 回答
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");
于 2012-07-19T20:00:44.653 回答
0

'\n'您可以同时拥有'\\'和,而不是作为您的角色之一'n'

需要明确的是,我的意思是让你把两者都'\\'放在'n'你的数组中。这样,两者都'\''n'打印出来。

于 2012-07-19T19:46:28.567 回答