如何编写文件内容的字符串表示形式?
How to write the string representation of the contents of a file?
在我的文件中,假设它具有以下内容:
my_file.txt
/* My file "\n". */
Hello World
如果我想生成一个文件并将相同的内容作为 C 代码中的字符串传递,新文件将如下所示:
my_generated_c_file.c
const char my_file_as_string[] = "/* My file \"\n\". */\nHello World\n\n";
在一次不幸的尝试中,我试图简单地一个接一个地添加字符:
#include <stdio.h>
int main ()
{
FILE *fp_in = fopen("my_file.txt", "r");
FILE *fp_out = fopen("my_generated_c_file.c", "w");
fseek(fp_in, 0L, SEEK_END);
long size = ftell(fp_in);
fseek(fp_in, 0L, SEEK_SET);
fprintf(fp_out, "const char my_file_as_string[] = \"");
while (size--) {
fprintf(fp_out, "%c", getc(fp_in));
}
fprintf(fp_out, \";\n\n");
fclose(fp_in);
fclose(fp_out);
return 0;
}
但这不起作用,因为例如 '\n'
被读取为换行符而不是 "\n"
。
如何解决?
您可以简单地在原始文件中存在 '\'
的地方打印 '\'
:
while (size--) {
char next_c = getc(fp_in);
if(next_c == '\') {
fputs("\\", fp_out);
}
else {
fputc(next_c, fp_out);
}
}
您可能还想执行其他此类转换,例如将换行符替换为 \n
。
在我的文件中,假设它具有以下内容:
my_file.txt
/* My file "\n". */
Hello World
如果我想生成一个文件并将相同的内容作为 C 代码中的字符串传递,新文件将如下所示:
my_generated_c_file.c
const char my_file_as_string[] = "/* My file \"\n\". */\nHello World\n\n";
在一次不幸的尝试中,我试图简单地一个接一个地添加字符:
#include <stdio.h>
int main ()
{
FILE *fp_in = fopen("my_file.txt", "r");
FILE *fp_out = fopen("my_generated_c_file.c", "w");
fseek(fp_in, 0L, SEEK_END);
long size = ftell(fp_in);
fseek(fp_in, 0L, SEEK_SET);
fprintf(fp_out, "const char my_file_as_string[] = \"");
while (size--) {
fprintf(fp_out, "%c", getc(fp_in));
}
fprintf(fp_out, \";\n\n");
fclose(fp_in);
fclose(fp_out);
return 0;
}
但这不起作用,因为例如 '\n'
被读取为换行符而不是 "\n"
。
如何解决?
您可以简单地在原始文件中存在 '\'
的地方打印 '\'
:
while (size--) {
char next_c = getc(fp_in);
if(next_c == '\') {
fputs("\\", fp_out);
}
else {
fputc(next_c, fp_out);
}
}
您可能还想执行其他此类转换,例如将换行符替换为 \n
。