我正在尝试将一个char数组写入文件,转义的字符应该用它们的等效文字写出来(例如换行应该写成'\ n'而不是文件中的实际换行符。)
如果数组是char *arr = "hello world\n";
我的代码应该写
char tempArr[100] ={'h','e','l','l','o','\s','w','o','r','l','d','\n'};
到文件。
有没有办法在C ++中实现这个目标?
答案 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");