今天我遇到了scanf函数的问题.假设您有一个类似于以下示例的结构.
struct structA{
bool bVal;
int nVal;
}
Run Code Online (Sandbox Code Playgroud)
如果您运行以下代码
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);
Run Code Online (Sandbox Code Playgroud)
它会打印出来
a.bVal = 0
a.nVal = 0
Run Code Online (Sandbox Code Playgroud)
原因是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);
Run Code Online (Sandbox Code Playgroud)
我的问题是,解决方案旁边是否有一种更清洁,直接的方法来避免这个问题?