【问题标题】:Read format specifiers from text file从文本文件中读取格式说明符
【发布时间】:2021-08-08 16:16:42
【问题描述】:

有没有办法从文本文件中读取格式说明符,例如%s%d,然后在字符串变量中使用此说明符以获取printf

例如,如果我有一个文件包含

foo=%s

我能做这样的事情吗?

FILE * f = fopen("/home/foo/bar", "r");

charn * s_buf = malloc(sizeof(charn) * 256);
fgets(s_buf, 255, f);
  
printf(s_buf, "bar");

然后打印出来:

foo=bar

我知道它显然不能完全像这样工作,但我希望你明白我的目的,也许知道一种方法来做这样的事情

【问题讨论】:

  • 在你的文件中写一个特定的字符来指示数据类型,然后用相应的 printf 切换大小写不是更容易吗?
  • 很像这样。格式字符串没什么特别的:只是一个字符串。您可以将其指定为常量或将其从文件中读取到变量中,或根据需要构建它。不过,从外部来源读取它时,安全问题比比皆是。

标签: c io formatting printf string-formatting


【解决方案1】:

您的代码是正确的,但您必须考虑如果文件包含 %d 而不是 %s 或任何其他必须显示的无效格式说明符会发生什么。

s_buf 的 malloc() 空间是正确的,但静态数组也可以。以后不需要再调用 free(s_buf)。

【讨论】:

  • 谢谢,现在可以使用了。问题实际上是我将文件从 windows 复制到 linux 而不转换编码。我从我的项目中复制了代码并进行了一些修改,这就是 malloc 存在的原因。我需要一个动态长度。我可以控制文本文件中的内容,我只需要一种占位符来从我的代码中插入变量
猜你喜欢
  • 1970-01-01
  • 2017-08-06
  • 2023-03-04
  • 2012-12-19
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
相关资源
最近更新 更多