【问题标题】:try.c:8: error: incompatible types in initialization - ctry.c:8:错误:初始化中的类型不兼容 - c
【发布时间】:2023-03-25 19:20:01
【问题描述】:

我正在尝试构建一个简单的 c 来读取文件并输入字符串, 但是我在编译时遇到了这个错误:

try.c:8: error: incompatible types in initialization

这是代码:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    FILE *try = fopen("C:\\Users\\User\\Desktop\\try1.txt", "r");

    char *string = *try;

    printf("%s\n", string);
    printf("%s\n", try);


    system("PAUSE");
    return 0;
}

我该如何解决这个问题?谢谢

【问题讨论】:

  • *try 的类型当然是FILE,而不是char *。你想要fread()fgets() 什么的。
  • char *string = NULL; size_t bufsize = 0; ssize_t slen = getline(&amp;string, &amp;bufsize, try);
  • 尝试使用fgetsfscanf等函数。
  • @EOF: getline 不是标准的。请改用fgets
  • @Olaf:getline() 是 POSIX。如果你没有getline(),我很抱歉。

标签: c types initialization


【解决方案1】:

关于这一行:

char *string = *try;

问题是发布的代码正在尝试将指向 FILE 结构的指针分配给 char 指针。

一般来说,fopen()返回的值只对read(), write(), fclose() fprintf() fwrite(), fread(), fscanf()等函数中的参数有用,实际FILE 指针的内容是没有意义的,除非编写与设备驱动程序等一起使用的非常低级的代码

发布的代码正在尝试使用“%s”格式说明符打印try 的内容。这是行不通的。建议:

printf( "%p is where 'try' points\n", try );

因为 '%p' 用于打印地址。

try 指向的内容需要使用 FILE 结构中的字段,可能会一一打印这些字段

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多