fopen_s(&file, "filename", mode) 在 visual studio 2019 C_language 中不起作用

Does't work fopen_s(&file, "filename", mode) in visual studio 2019 C_language

这是我的第一个问题。如果你能帮助我,那将不胜感激。这段代码是关于我的论文的。我正在尝试写入一个文件并且它可以工作,但试图读取另一个文件却没有读取。我不能让它工作。屏幕上出现“文件打不开”。请帮助我,阅读文件。

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

int main()
{
    FILE* myfile;
    errno_t errorcode = fopen_s(&myfile, "output.txt", "w");

    if (myfile == NULL)
    {
       printf("Error");
    }

    FILE* data; 
    errno_t err = fopen_s(&data, "C:\SA\input.txt", "r");

    //errno_t err = fopen_s(&data, "input.txt", "r");

    if(data==NULL)
    {
       printf("file does not open");
    }
return 0;
getchar();
}

发布的原始代码有 2 个主要问题:

  • "C:\SA\input.txt" 应该是 "C:\SA\input.txt" 或者只是 "C:/SA/input.txt"。 Microsoft 的遗留系统使用 \ 作为路径分隔符,它必须在 C 字符串中转义为 \(在许多其他语言中也是如此)。 POSIX 系统上的传统路径分隔符是 /,它在 Windows.
  • 中也受支持
  • if(data==NULL); 是一个空语句的测试,因此没有任何反应。
  • 请注意,您不应在 C 程序中使用 C++ headers,例如 <iostream>

这是一个简化版本:

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

int main() {
    FILE *myfile;
    errno_t err = fopen_s(&myfile, "output.txt", "w");
    if (err) {
        fprintf(stderr, "Cannot open file %s: %s\n",
                "output.txt", strerror(err));
        return 1;
    }

    FILE *data; 
    err = fopen_s(&data, "C:\SA\input.txt", "r");
    if (err) {
        fprintf(stderr, "Cannot open file %s: %s\n",
                "C:\SA\input.txt.txt", strerror(err));
        return 1;
    }
    getchar();  // keep terminal window open
    return 0;
}