gpt4 book ai didi

c - 这个 "(null)"来自哪里

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

我正在尝试实现一些代码来挑选文本文件的最后一行,并且目前正在使用这个示例,但是我不知道如何防止代码在找不到时打印出“(null)”文件,在它找不到文件的那一刻,它会打印出“文件无法在最后一行打开:没有这样的文件或目录”然后它会在下面打印空的东西,对于这个特定的应用程序我宁愿它只是打印出“文件无法打开”部分,但不打印出空部分,如果有人能为此指出正确的方向,我将非常感激,谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifndef max
#define max(a, b) ((a)>(b))? (a) : (b)
#endif

long GetFileSize(FILE *fp){
long fsize = 0;

fseek(fp,0,SEEK_END);
fsize = ftell(fp);
fseek(fp,0,SEEK_SET);//reset stream position!!

return fsize;
}
char *lastline(char *filepath){
FILE *fp;
char buff[4096+1];
int size,i;
long fsize;
if(NULL==(fp=fopen(filepath, "r"))){
perror("file cannot open at lastline");
return NULL;
}
fsize= -1L*GetFileSize(fp);
if(size=fseek(fp, max(fsize, -4096L), SEEK_END)){
perror("cannot seek");
exit(0);
}
size=fread(buff, sizeof(char), 4096, fp);
fclose(fp);
buff[size] = '\0';
i=size-1;
if(buff[i]=='\n'){
buff[i] = '\0';
}
while(i >=0 && buff[i] != '\n')
--i;
++i;
return strdup(&buff[i]);
}

int main(void){
char *last;

last = lastline("data.txt");
printf("\"%s\"\n", last);
free(last);
return 0;
}

最佳答案

您可以在行 last = laSTLine("data.txt"); 之后添加这两行。打印 NULL 的原因是因为您正在打印函数 laSTLine() 的结果。此函数将在失败时返回 NULL

if( last != NULL )
printf( "\"%s\"\n", last );

关于c - 这个 "(null)"来自哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10553000/

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