“#include”C程序中的文本文件为char []

“#include”C程序中的文本文件为char []

有没有办法在编译时将整个文本文件作为字符串包含在C程序中?

就像是:

  • file.txt的:

    This is
    a little
    text file
  • main.c中:

    #include <stdio.h>int main(void) {
       #blackmagicinclude("file.txt", content)
       /*
       equiv: char[] content = "This is\na little\ntext file";
       */
       printf("%s", content);}

获取一个在stdout上打印的小程序“这是一个小文本文件”

目前我使用了一个hackish python脚本,但它只是丑陋而且仅限于一个变量名,你能告诉我另一种方法吗?


杨魅力
浏览 533回答 3
3回答

潇湘沐

我建议使用(unix util)xxd。你可以像这样使用它$&nbsp;echo&nbsp;hello&nbsp;world&nbsp;>&nbsp;a $&nbsp;xxd&nbsp;-i&nbsp;a输出:unsigned&nbsp;char&nbsp;a[]&nbsp;=&nbsp;{ &nbsp;&nbsp;0x68,&nbsp;0x65,&nbsp;0x6c,&nbsp;0x6c,&nbsp;0x6f,&nbsp;0x20,&nbsp;0x77,&nbsp;0x6f,&nbsp;0x72,&nbsp;0x6c,&nbsp;0x64,&nbsp;0x0a};unsigned&nbsp;int&nbsp;a_len&nbsp;=&nbsp;12;

守着一只汪

问题是关于C但是如果有人试图用C ++ 11做,那么只需对包含的文本文件进行少量更改就可以完成,这要归功于新的原始字符串文字:在C ++中这样做:const char *s =#include "test.txt";在文本文件中执行以下操作:R"(Line 1Line 2Line 3Line 4Line 5Line 6)"因此,文件顶部必须只有一个前缀,并且文件末尾只有一个后缀。在它之间你可以做你想要的,只要你不需要字符序列就不需要特殊的转义)"。但是,如果您指定自己的自定义分隔符,即使这样也可以:R"=====(Line 1Line 2Line 3Now you can use "( and )" in the text file, too.Line 5Line 6)====="

holdtom

你有两种可能性:利用编译器/链接器扩展将文件转换为二进制文件,并使用适当的符号指向二进制数据的开头和结尾。请参阅以下答案:使用GNU ld链接描述文件包含二进制文件。将文件转换为可以初始化数组的字符常量序列。请注意,您不能只执行“”并跨越多行。你需要一个行继续符(\),转义"字符和其他来使它工作。更容易编写一个小程序将字节转换为类似的序列'\xFF', '\xAB', ...., '\0'(或使用xxd另一个答案描述的unix工具,如果你有它!):码:#include&nbsp;<stdio.h>int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;c; &nbsp;&nbsp;&nbsp;&nbsp;while((c&nbsp;=&nbsp;fgetc(stdin))&nbsp;!=&nbsp;EOF)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("'\\x%X',",&nbsp;(unsigned)c); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;printf("'\\0'");&nbsp;//&nbsp;put&nbsp;terminating&nbsp;zero}(未经测试)。然后做:char&nbsp;my_file[]&nbsp;=&nbsp;{#include&nbsp;"data.h"};data.h由哪里生成cat&nbsp;file.bin&nbsp;|&nbsp;./bin2c&nbsp;>&nbsp;data.h
打开App,查看更多内容
随时随地看视频慕课网APP