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

类似于:

  • 文件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);
    }
    

获取一个在标准输出上打印"This is"的小程序 一点 文本文件"

目前我使用的是一个粗俗的python脚本,但它非常难看,而且只限于一个变量名,你能告诉我另一种方法吗?

推荐答案

我建议使用(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;

C++相关问答推荐

InetPton()函数无效的IP地址

如果实际的syscall是CLONE(),那么为什么strace接受fork()呢?

当我运行/调试C程序时,Malloc()似乎正在将&q;r\r...&q;赋值给一个指针,我不确定为什么?

C由四个8位整数组成无符号32位整数

使用C时,Windows CMD中的argc参数是否包含重定向命令?

以下声明和定义之间的区别

是否可以使用指针算法在不对齐的情况下在 struct 中相同类型的字段的连续序列之间移动?

1处的解析器错误:yacc语法的语法错误

函数的限制限定指针参数允许优化调用方函数吗?

tick.q中的Kdb+键控表语法

为什么用非常数指针变量改变常量静态变量时会出现分段错误?

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

无法访问共享目标文件内的共享指针

C11/C17标准允许编译器清除复合文字内存吗?

-Wnonnull-Compare警告不是具有误导性吗?

C23标准是否向后兼容?

在printf()中用%.*S格式填充长度为0的字符串是否会调用任何UB?如果是,是哪一个?

OMP并行嵌套循环

这些表达式是否涉及 C 中定义的复合文字?

System V 消息队列由于某种原因定期重置