【问题标题】:how to format specify a const char * in C?如何格式化在C中指定一个const char *?
【发布时间】:2018-08-26 09:58:21
【问题描述】:

我有这个循环:

while (fscanf(file, "%s", word) != EOF)

但是word 这里是const char * 不是char * 那我应该怎么改%s呢?

【问题讨论】:

  • 您不会更改 const 指针指向的内容,不是吗?
  • @iBug 不,我只想在这里指定“单词”。

标签: c pointers format-specifiers


【解决方案1】:

由于scanf 系列用于读取输入,因此提供的指针应该指向可写的东西。 const char * 指针不能用于修改它所指向的内容(即使目标实际上是可写的),因此它绝不应该出现在 scanf 中以接收读取数据。

您还应该注意,word 在用于调用scanf 之前必须指向一些有效的可写内存,否则会导致未定义的行为。

【讨论】:

  • 您可能还提到 word 作为 char * 指针在将其传递给 scanf() 之前应指向实际数组,并且 %s 作为要存储的最大字符数是不安全的到数组是未知的。
  • 我不确定您所说的“const char * 指针不能用于修改它所指向的内容(即使目标实际上是可写的)......”虽然不能直接使用指针修改对象,如果指向的对象没有用const定义(所以const后来被添加到指针中;它不是对象的原始对象),那么C标准允许转换const char *char * 并使用它来修改对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 2013-06-12
  • 2020-11-11
  • 2014-10-22
相关资源
最近更新 更多