我正在尝试将 char 数组写入文件,转义字符应使用其等效文字写入(例如,换行符应写为 '\n' 而不是文件中的实际换行符)。
如果数组是char *arr = "hello world\n";
我的代码应该写
char tempArr[100] ={'h','e','l','l','o','\s','w','o','r','l','d','\n'};
到文件。
有什么方法可以在 C++ 中实现这一点吗?
我正在尝试将 char 数组写入文件,转义字符应使用其等效文字写入(例如,换行符应写为 '\n' 而不是文件中的实际换行符)。
如果数组是char *arr = "hello world\n";
我的代码应该写
char tempArr[100] ={'h','e','l','l','o','\s','w','o','r','l','d','\n'};
到文件。
有什么方法可以在 C++ 中实现这一点吗?
是的,这是一个 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++;
}
}
好吧,我知道在标准 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");
'\n'
您可以同时拥有'\\'
和,而不是作为您的角色之一'n'
。
需要明确的是,我的意思是让你把两者都'\\'
放在'n'
你的数组中。这样,两者都'\'
被'n'
打印出来。