gpt4 book ai didi

c - 使用 freopen 和之后使用 fopen 是否合法?

转载 作者:行者123 更新时间:2023-12-04 18:24:06 25 4
gpt4 key购买 nike

假设我有一个字符串 char* str .
我通过以下方式将其打印到缓冲区:

char buf[MAX_LEN];
freopen("tmp","w",stdout);
printf("%s\n",str);
fflush(stdout);
fp = fopen(tmp,"r");
if (fp == NULL) return;
fgets(buf,MAX_LEN,fp);
fclose(fp);
fclose(stdout);

此代码可能会导致无效的流缓冲区句柄吗?
使用 freopen合法吗之后 fopen ?
基于我系统的限制,我无法使用 fprintfsprintf .

最佳答案

从理论上讲,它是完全合法的并且工作正常。根据它的手册页,它甚至是它的主要用例:

The freopen() function opens the file whose name is the string pointed to by path and associates the stream pointed to by stream with it. The original stream (if it exists) is closed. The mode argument is used just as in the fopen() function. The primary use of the freopen() function is to change the file associated with a standard text stream (stderr, stdin, or stdout)



在实践中,您的代码将无法正常工作:主要在 "tmp" 之间存在一些错误和 tmp & 缺少标题。此代码将起作用:
#include <stdio.h>
#define MAX_LEN 512

int main() {
const char* str = "data\n";
FILE* fp;
char buf[MAX_LEN];

freopen("tmp","w",stdout);
printf("%s\n",str);
fflush(stdout);
fp = fopen("tmp","r");
if (fp == NULL) return;
fgets(buf,MAX_LEN,fp);
// here, buf gets str's content
fclose(fp);
fclose(stdout);
return 0;
}

关于c - 使用 freopen 和之后使用 fopen 是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com