【问题标题】:sscanf incompatible pointer typessscanf 不兼容的指针类型
【发布时间】:2015-03-02 02:42:30
【问题描述】:

所以我尝试使用 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 *'

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

【问题讨论】:

  • 错误信息与您发布的代码行不符。错误消息提到了一个变量pf,它不在sscanf 行中。
  • 您是否将 FILE* 作为第一个参数传递给 sscanf() ?不应该是char* 还是fscanf()
  • 不是所有的都没有......

标签: c pointers scanf


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多