【发布时间】:2018-01-20 02:38:38
【问题描述】:
今天遇到了一个scanf函数的问题。假设您有一个类似于以下示例的结构。
struct structA{
bool bVal;
int nVal;
}
如果你运行以下代码
structA a;
a.nVal = 7;
...// Assume that we read a text file and the only text is "0"
fscanf(fp,"%d",&a.bVal);
printf("\n a.bVal=%d",a.bVal);
printf("\n a.nVal=%d",a.nVal);
它会打印出来
a.bVal = 0
a.nVal = 0
原因是 fscanf 函数假定 a.bVal 是一个整数并覆盖 a.nVal 的前 3 个字节。这个问题可以通过以下肮脏的解决方案来解决。
structA a;
a.nVal = 7;
...// Assume that we read a text file and the only text is "0"
int nBVAL;
fscanf(fp,"%d",&nBVAL);
a.bVal = nBVAL;
printf("\n a.bVal=%d",a.bVal);
printf("\n a.nVal=%d",a.nVal);
我的问题是,除了解释的解决方案之外,还有更简洁直接的方法来避免这个问题吗?
【问题讨论】:
-
@EugeneSh。那篇文章说 阅读 时会提升 bool。 OP 的问题在于 writing