作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当试图从文件中读取单个整数值到类型为 MKL_INT
的变量时,我遇到了我无法完全理解的程序中的特殊行为。
这段简短的代码说明了问题:
#include <stdio.h>
#include <mkl_types.h>
void readFile(MKL_INT *a, char *fn)
{
FILE *fp;
fp = fopen(fn, "r");
fscanf(fp, "%d", a);
fclose(fp);
if(*a == 1)
printf("a == 1 in readFile()\n");
}
int main()
{
MKL_INT a;
char *fn = "data.dat";
readFile(&a, fn);
if(a == 1)
printf("a == 1 in main()\n");
/* Once the last line is commented out, (a == 1) in main() as well as
(*a == 1) in readFile() yield "false" */
MKL_INT b = 1;
return 0;
}
我使用的编译命令是
gcc -DMKL_ILP64 -m64 test.c -o test -I$MKLROOT -L$MKLROOT
data.dat
文件仅包含
1
我观察到以下情况
b
声明的最后一行存在,a 似乎就可以从文件中正确读取,并且在两次比较中都会产生 true
false
到目前为止,我唯一的线索是编译器标志似乎在这里发挥了作用:从标志中删除 -DMKL_ILP64 -m64
导致程序按预期无条件地运行最后一行。 ..
我的系统详细信息是
我以前从未经历过这样的行为,很想知道这里到底发生了什么。
最佳答案
这可能是因为您的 readFile 函数中的格式说明符错误。
在我手边的标题中 MKL_INT == MKL_INT64 == long long int 或 __int64。要读取这些整数,您需要使用正确的格式说明符,否则它是未定义的行为。
long long int 用“%ll”读取,__int64 用“%I64d”读取。因此,您需要检查系统上的 MKL_INT 到底是什么。
关于c - 从文件中读取 MKL_INT 时的特殊行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160453/
当试图从文件中读取单个整数值到类型为 MKL_INT 的变量时,我遇到了我无法完全理解的程序中的特殊行为。 这段简短的代码说明了问题: #include #include void readFil
我是一名优秀的程序员,十分优秀!