c - sscanf 不兼容的指针类型

标签 c pointers scanf

所以我尝试使用 sscanf 函数读取一行的所有组件,如下所示:

char *R1;
char *R2;
int immediate;
char mnemonic[6];
FILE *input = fopen("file.txt","r");
...
sscanf(input, "%s %s %s %d", mnemonic, R1, R2, immediate);

当我编译时,我收到以下警告:

Warning: passing argument 1 pf 'sscanf' from incompatible pointer type note: expected const char * restrict but argument is of type 'struct FILE *'

我怀疑此警告是我的代码无法按预期执行的原因,有人可以尝试解释问题所在吗?

最佳答案

如果您尝试从 FILE* 读取数据,您需要使用 fscanf,而不是 sscanf。后者从字符串 (char *) 中扫描。

此外,您需要为%d传递一个相应的指向int的指针,否则fscanf无法修改整数。

此外,您正在传递未初始化的 char*s - fscanf 将尝试将您的字符串写入某个未定义的地址。您需要像为 mnemonic 一样为他们提供存储空间。

最后,无论何时使用 %s,您都应该明确地告诉它缓冲区的大小。否则你很容易溢出它。

char R1[6];
char R2[6];
int immediate;
char mnemonic[6];
FILE *input = fopen("file.txt","r");
...
if (fscanf(input,
    "%6s %6s %6s %d", mnemonic, R1, R2, &immediate) != 4) {
    // bad things happened

关于c - sscanf 不兼容的指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28801925/

相关文章:

c - 为什么 strcpy 会触发全局变量的段错误?

C - 如何将数组指针设置回第一个内存字节

CSV 文件尝试获取每行第一个逗号后的项目

c - 为什么这种 strcpy 的使用被认为是错误的?

C - 如何将指针值返回给 main?

c - getchar() 和 scanf 中的输入缓冲区

c++ - 在 cout 之后调用 scanf

c - 在调试中得到不同的结果

c - 在第二个索引上获取一些垃圾值

c - scanf() 格式字符串中尾随空格的影响是什么?