テキストファイルの最後の行を選択するコードを実装しようとしていますが、現在この例を使用していますが、ファイルが見つからないときにコードが「(null)」を出力しないようにする方法がわかりません。ファイルが見つからない場合、「ファイルは最後の行で開くことができません:そのようなファイルまたはディレクトリはありません」と出力され、次に以下のnullが出力されます。この特定のアプリケーションでは、単に出力する方がよいでしょう。 「ファイルを開くことができません」の部分ですが、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;
}