【问题标题】:How to pass a char array to fopen_s如何将 char 数组传递给 fopen_s
【发布时间】:2018-12-11 04:15:58
【问题描述】:
#include <stdio.h>

int main(void)

{
    int i;
    char name[20];
    FILE * src;
    FILE * des;
    fgets(name,20,stdin); 
    fopen_s(&src,"배경사진.jpg", "rb");
    fopen_s(&des,name,"wb");
    char buf[20];
    int readcnt;

    if (src == NULL || des == NULL) {
        puts("파일 오픈 실패!");
        return -1;
    }
    while (1)
    {
        readcnt = fread((void*)buf, 1, sizeof(buf), src);

        if (readcnt < sizeof(buf))
        {
            if (feof(src) != 0)
            {
                fwrite((void*)buf, 1, readcnt, des);


                puts("파일복사 완료");
            }
            else
                puts("파일복사 실패");

            break;
        }

我想在 cmd 中获取(要复制的新文件名)。 一般使用fopen_s(&amp;des,"~.jpg", "wb");。 但我使用 char 数组而不是 "~.jpg"

如何让程序用户可以放..

【问题讨论】:

  • 旁白:你确定你对feof的感觉是正确的吗?如果读取操作尝试读取文件末尾之后,它会返回一个非零值,但您将其视为成功。在循环中使用fread 的常用方法是通过读取的项目数来控制循环。比如while ((readcnt = fread(buf, 1, sizeof(buf), src)) != 0) {...}

标签: c fopen


【解决方案1】:

如果我理解你的问题。

fgets(name,20,stdin); 

fopen_s(&des,name,"wb");

您的fopen_s 将失败,因为fgets 将换行符添加到name

因此您需要从name 中修剪换行符。

例子:

size_t len = strlen(name);
if (len > 0 && name[len - 1] == '\n')
    name[len - 1] = '\0';

fopen_s(&des,name,"wb");

【讨论】:

  • 感谢您的回答。能被另一个国家的人回答真是太棒了!
猜你喜欢
  • 2012-05-10
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 2023-03-25
  • 2015-12-22
  • 1970-01-01
  • 2012-10-23
相关资源
最近更新 更多