【问题标题】:Inexplicable "Invalid Argument" error from fopen_s来自 fopen_s 的莫名其妙的“无效参数”错误
【发布时间】:2021-03-28 01:16:38
【问题描述】:

本质上,我在处理通过套接字发送文件的项目时遇到了一个问题。我是一个新手,经过几个小时的搜索,我仍然没有找到可行的解决方案,但我将问题归结为以下代码。

#include <stdio.h>
#include <errno.h>
#include <Windows.h>

int main()
{
    const char* fileName = "‪C:\\Users\\Username\\Desktop\\bugs.jpg";

    FILE* f;
    fopen_s(&f, fileName, "r");
    
    if (f == NULL)
        printf("Null Result");
    else
        printf("Working");

    printf("\nError %d \n", errno);
}

由于某种原因程序无法打开文件,errno 返回值 22,对应于 EINVAL,或无效参数 here。我很困惑,因为我似乎根据 fopen_s 的规范为 fopen_s 提供了正确的参数。任何帮助或指针(哈哈)都非常感谢,谢谢!

【问题讨论】:

  • 您的用户名实际上不太可能是"Username"
  • 实际用户名是我的真实姓名,因此选择为帖子更改它,因为它的值与主要问题无关:)
  • 我的猜测是路径写错了或者文件不存在
  • 也许你正在使用 cygwin?或类似的东西,尝试使用相对路径 => 只是为了确保你找到一些东西
  • 也许它只是在问题中,但复制/粘贴您的代码会给我一个警告warning C4566: character represented by universal-character-name '\u202A' cannot be represented in the current code page (1252) 并重新输入文件名修复它以及正确打开文件。如果您要打开二进制文件,则需要 "rb"

标签: c fopen errno


【解决方案1】:

感谢 cmets,我发现了它为什么不起作用。本质上,我是从文件属性中复制“对象名称”字段以节省输入时间。不知何故,这拖着一个不可见的 '\u202A' 字符,完全破坏了 fopen_s。

Picture

简而言之,不要试图偷工减料。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2016-12-06
    相关资源
    最近更新 更多