【问题标题】:How do I cast a string in C?如何在 C 中转换字符串?
【发布时间】:2013-10-31 16:31:32
【问题描述】:

我正在制作一个应该包含 2 个目录路径(一进一出)的源文件。然后将指定文件从一个目录复制到另一个目录。我已经完成了代码,除非我编译它,它会打印:

警告:传递 ‘fread’ 的参数 3 从指针生成整数而不进行强制转换 [默认启用]

这是我遇到问题的部分(我认为):

if (fp_in != NULL && fp_out != NULL)
{
    char    line[BUFSIZ];

    while (fread(line, sizeof line, fp_in) != NULL)
...

【问题讨论】:

  • 请显示更多代码:例如,你是如何声明fp_in的?
  • 您是否在寻找类似:stackoverflow.com/questions/7021725/… 的内容?
  • 您缺少参数,请查看文档中的fread
  • 在这种情况下要做的第一件事是,仔细检查文档。在这种情况下,man fread(使用 google,或在 shell 提示下)。
  • 您使用哪个编译器?如果它没有在error: too few arguments to function ‘fread’note: expected ‘size_t’ but argument is of type ‘struct FILE *’的方向上说什么,那就奇怪了

标签: c string casting integer


【解决方案1】:

fread() 需要 4 个参数,而您只需要 fgets()

检查两个原型,如果你想逐行阅读,你可以简单地使用fgets()

 while (fgets(line, sizeof line, fp_in) != NULL)
         {
         //....
         }

【讨论】:

    【解决方案2】:

    更改fread 的用法 来自

    fread(line, sizeof line, fp_in)
    

    num_bytes = fread(line, sizeof(char), sizeof line, fp_in);
    

    其中num_bytes 应定义为size_t 类型。保存从文件中读取的字节数(在这种情况下)。


    阅读fread()

    当您在需要时参考文档时,请务必阅读有关您第一次使用的库函数的文档。

    【讨论】:

    • 我很确定sizeof(char) 中需要括号。
    • fread() 不返回 NULL 。如果发生错误或到达文件末尾,则返回值是一个短项目计数(或零)。更正你的答案。
    • fgets 方法似乎正在编译,但我尚未对其进行测试,因为我必须完成将正确目录路径传递给它的源文件。感谢您的回答!对此,我真的非常感激! :D
    猜你喜欢
    • 1970-01-01
    • 2022-10-05
    • 2023-03-24
    • 2012-10-13
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    相关资源
    最近更新 更多