sscanf不兼容的指针类型

时间:2015-03-02 02:42:31

标签: 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 *'

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

1 个答案:

答案 0 :(得分:2)

如果您尝试阅读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