gpt4 book ai didi

c - fclose(stdout) 在使用 freopen 时即使在 NULL 检查后也会导致崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 05:48:53 25 4
gpt4 key购买 nike

我正在尝试使用 freopen 将标准输出打印到文件,但下面的代码崩溃了。我正在检查 NULL,并且我相当确定我在程序的其他地方没有段错误,因为我验证了我所有的 mallocs 都是正确的。

程序在到达 fclose(stdout) 时崩溃并且不打印我附加的错误消息以检查它。 printf("\nTestBeforeClose"); 行打印但 printf("\nTestAfterClose"); 不打印。

int printAllVarRedir(char * filename, int redirmarker) {
var *current = NULL;

if (redirmarker == 1) {
if (freopen(filename, "w", stdout) == NULL) {
perror("Unable to open file");
return 1;
} else {
if (head == NULL) {
perror("No Variables");
fclose(stdout);
return 1;
} else {
current = head;
printf("%s=%s. Address is %p.Next is:%p\n", current->varname, current->value, current, current->next);
while (current->next != NULL) {
current = current->next;
printf("%s=%s. Address is %p.Next is:%p\n", current->varname, current->value, current,
current->next);
}
printf("\nTestBeforeClose");
if (fclose(stdout) == EOF) {
printf("\nError is %s\n", strerror(errno));
}
printf("\nTestAfterClose\n");
return 0;
}
}
}
}

这是我正在使用的 var 结构:

typedef struct varlist{
char * varname;
char * value;
struct varlist * next;
}var;

var * head = NULL;

最佳答案

当然 printf("\nTestAfterClose\n"); 不会打印。 printf 打印到您刚刚关闭的 stdout

关于c - fclose(stdout) 在使用 freopen 时即使在 NULL 检查后也会导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49901957/

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