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 でこれを行う方法を知っています。

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

はい、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

キャラクターの 1 つとして持つ代わりに、と の両方を'\n'持つことができます。'\\''n'

明確にするために、配列に'\\'との両方を入れることを意味します。'n'そうすれば、 と の両方'\''n'出力されます。

于 2012-07-19T19:46:28.567 に答える