为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
杨魅力 2019-08-01 16:07:48
“#include”C程序中的文本文件为char []有没有办法在编译时将整个文本文件作为字符串包含在C程序中?就像是:file.txt的:This is a little text filemain.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脚本,但它只是丑陋而且仅限于一个变量名,你能告诉我另一种方法吗?
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

我建议使用(unix util)xxd。你可以像这样使用它

$ echo hello world > a
$ xxd -i a

输出:

unsigned char a[] = {
  0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x0a};unsigned int a_len = 12;


查看完整回答
反对 回复 2019-08-01
?
守着一只汪

TA贡献1872条经验 获得超3个赞

问题是关于C但是如果有人试图用C ++ 11做,那么只需对包含的文本文件进行少量更改就可以完成,这要归功于新的原始字符串文字:


在C ++中这样做:


const char *s =

#include "test.txt"

;

在文本文件中执行以下操作:


R"(Line 1

Line 2

Line 3

Line 4

Line 5

Line 6)"

因此,文件顶部必须只有一个前缀,并且文件末尾只有一个后缀。在它之间你可以做你想要的,只要你不需要字符序列就不需要特殊的转义)"。但是,如果您指定自己的自定义分隔符,即使这样也可以:


R"=====(Line 1

Line 2

Line 3

Now you can use "( and )" in the text file, too.

Line 5

Line 6)====="


查看完整回答
反对 回复 2019-08-01
?
holdtom

TA贡献1805条经验 获得超10个赞

你有两种可能性:

  1. 利用编译器/链接器扩展将文件转换为二进制文件,并使用适当的符号指向二进制数据的开头和结尾。请参阅以下答案:使用GNU ld链接描述文件包含二进制文件

  2. 将文件转换为可以初始化数组的字符常量序列。请注意,您不能只执行“”并跨越多行。你需要一个行继续符(\),转义"字符和其他来使它工作。更容易编写一个小程序将字节转换为类似的序列'\xFF', '\xAB', ...., '\0'(或使用xxd另一个答案描述的unix工具,如果你有它!):

码:

#include <stdio.h>int main() {
    int c;
    while((c = fgetc(stdin)) != EOF) {
        printf("'\\x%X',", (unsigned)c);
    }
    printf("'\\0'"); // put terminating zero}

(未经测试)。然后做:

char my_file[] = {#include "data.h"};

data.h由哪里生成

cat file.bin | ./bin2c > data.h


查看完整回答
反对 回复 2019-08-01
  • 3 回答
  • 0 关注
  • 532 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信