gpt4 book ai didi

c - 基本 C 问题。 fprintf 和 fgets 失败

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

我有一些基本的 C 问题让我抓狂。让我发布我的代码,然后我会告诉您出了什么问题。

#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>

static int GetLine();


int main() {
char* sourceFile;
char* destinationFile;
int error, bytesRead;
char* sourceFD;
char* destinationFD;
char buffer[100];

error = GetLine("Please enter a source file name: \n", sourceFile, 100);
if (error == 1) {
printf("A source file was not inputted.\n");
return 0;
}
else if (error == 2) {
printf("Source file is too long.\n");
return 0;
}

error = GetLine("Please enter a destination file name: \n", destinationFile, 100);
if (error == 1) {
printf("A destination file was not inputted.\n");
return 0;
}
else if (error == 2) {
printf("Destination file is too long.\n");
return 0;
}
}

#define OK 0
#define NO_INPUT 1
#define TOO_LONG 2
static int GetLine (char *prmpt, char *buff, unsigned int sz) {
int ch, extra;

// Get line with buffer overrun protection.
if (prmpt != NULL) {
printf("%s", prmpt);
fflush(stdout);
}
}

if (fgets (buff, sz, stdin) == NULL) {
fprintf(stderr, "fgets returned NULL");
return NO_INPUT;
}

printf("logging input: %s", buff);

// If it was too long, there'll be no newline. In that case, we flush
// to end of line so that excess doesn't affect the next call.
if (buff[strlen(buff)-1] != '\n') {
extra = 0;
while (((ch = getchar()) != '\n') && (ch != EOF))
extra = 1;
return (extra == 1) ? TOO_LONG : OK;
}

// Otherwise remove newline and give string back to caller.
buff[strlen(buff)-1] = '\0';
return OK;
}

错误发生在 GetLine 函数中,该函数主要由另一篇 StackOverflow 帖子提供。这是我的问题。

  1. 无论我做什么,我都无法使调试打印语句正常工作。基本的 printf 经常会失败。之后立即调用 fflush(stdout) 无济于事,setbuf(stdout, NULL) 也无济于事。现在我正在尝试 fprintf(stderr),但也无济于事。不断失败的 LOC(无论我尝试哪种方法)是 fprintf(stderr, "fgets returned NULL")。请注意,该应用程序仍然给我“未输入源文件”的错误。我的目标是 stdout 还是 stderr 都没有关系。

  2. fgets 每次都返回 NULL。我不知道为什么。不,我提供的输入并不大。

编辑:我刚刚注意到那个 if 语句(fgets 语句)中缺少括号。让我看看修复了什么。

最佳答案

if (fgets (buff, sz, stdin) == NULL)
fprintf(stderr, "fgets returned NULL");
return NO_INPUT;

无论 fgets() 返回什么,这里 return NO_INPUT; 总是被执行。使用 {} 将这两个语句括起来。

关于c - 基本 C 问题。 fprintf 和 fgets 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28668156/

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