[在我的程序中,我目前可以通过char读取具有给定名称“ fichier1.txt”的文件,但是我要寻找的是存储一行(此处为char指针),然后以这种方式显示它:] >
-ligne 1:内容行1
第2行:内容行2
-ect ...
我试图按字符存储char,但是由于它是一个指针,但我对指针非常熟悉,因此我无法存储一行,然后重用该指针存储下一行的char。] >
我不得不说这是学校项目的一部分,我必须使用POSIX标准。
#include<stdio.h> #include<stdlib.h> #include<errno.h> #include<unistd.h> #include<sys/types.h> #include<sys/wait.h> #include <pthread.h> #include<string.h> #include <sys/stat.h> #include <fcntl.h> int main(){ int read_fd, write_fd; off_t offset = 0; char lu; struct stat statFd; char *fichier = "fichier1.txt"; read_fd = open(fichier,O_RDONLY); stat(fichier, &statFd); if(read_fd == -1){ perror("open"); exit(EXIT_FAILURE); } int i = 0; char * line; // variable to store line while(lseek(read_fd,offset, SEEK_SET) < statFd.st_size) { if(read(read_fd, &lu, 1) != -1) { printf("%c",lu); offset++; } else { perror("READ\n"); close(read_fd); close(write_fd); exit(EXIT_FAILURE); } } return 0; }
我想使用open()函数而不是fopen()
[在我的程序中,我目前可以通过char读取具有给定名称“ fichier1.txt”的文件,但是我要寻找的是存储一行(此处为char指针),然后以这种方式显示它:- ligne 1:...
由于您能够从文件中读取一个接一个的字符,因此while
循环中的逻辑将用于在阵列中一次存储整行(最多199个字符,但可以增加),然后显示它:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
FILE *fptr=fopen( "fichier1.txt","r");
int i;
char arr[200]; //THIS ARRAY WILL HOLD THE CONTENTS OF A LINE TEMPORARILY UNTIL IT IS PRINTED
int temp_index=0,line_number=1;;
memset(arr,'\0',sizeof(arr));
while((i=getc(fptr))!=EOF)
{
if(i!='\n')
{
arr[temp_index++]=i;
}
if(i=='\n')
{
printf(line %d: %s\n",line_number++,arr);
temp_index=0;
memset(arr,'\0',sizeof(arr));
}
}
return 0;
}
在每次迭代中调用lseek
可能效率不高,并且在无法搜索的设备上可能会失败。如果不需要存储行,我将按照以下几行编写程序。
Observer的回答帮助我修改了程序,谢谢大家的帮助。