gpt4 book ai didi

c - 尝试从文件读取行返回不正确的行

转载 作者:行者123 更新时间:2023-11-30 19:01:26 25 4
gpt4 key购买 nike

当从 C 语言的文件中读取一行时,尝试使用 printf 时会返回错误的行。我认为这是因为我返回 char* 而不是 char 但是返回 char 会导致崩溃。

char* getLineFromFile(const char name[], int lineNumber) 
{
FILE *file = fopen(name, "r");
int count = 0;
if (file != NULL)
{
char line[256]; /* or other suitable maximum line size */
while (fgets(line, sizeof line, file) != NULL) /* read a line */
{
if (count == lineNumber)
{
fclose(file);
return line;
}
else
{
count++;
}
}
fclose(file);
}
else
{
printf("Couldn't find file!");
}
}

//Example call
printf(getLineFromFile("Include/index.db", 1));

应该获取文件的第二行,但返回格式错误的字符串。

最佳答案

问题是 getLineFromFile 中的 return line; - 您返回的是 local array当您尝试通过调用 printf 来访问它时,会调用未定义的行为。相反,将缓冲区传递给 getLineFromFile 并在找到行时将其复制到其中:

int getLineFromFile(const char name[], int lineNumber, char* out, size_t outsize)
{
FILE* file = fopen(name, "r");
int count = 0;
if (file != NULL)
{
char line[256]; /* or other suitable maximum line size */
while (fgets(line, sizeof line, file) != NULL) /* read a line */
{
if (count == lineNumber)
{
fclose(file);
strncpy(out, line, outsize);
out[outsize - 1] = '\0';
return 1;
}
else
{
count++;
}
}
fclose(file);
return 0;
}
else
{
printf("Couldn't find file!");
return 0;
}
}

//Example call
char lineBuffer[256];
if (getLineFromFile("Include/index.db", 1, lineBuffer, sizeof lineBuffer)) {
printf("%s", lineBuffer);
}

关于c - 尝试从文件读取行返回不正确的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57840563/

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