在C中读取文件行
Read lines of file in C
我正在尝试逐行读取标准文件输入。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUFFER_SIZE 1204
char* readLine(char* buffer){
int i = 0;
for(i; i< BUFFER_SIZE; i++){
printf("%c",buffer[i]);
if( '\n' == buffer[i]){
char* line[124];
memcpy( line, &buffer[0], i-1 );
return *line;
}
}
free(buffer);
}
int doStuffWithLine(char* line){
return 1;
}
int main(int argc, char *argv[])
{
ssize_t aux1;
char *buffer = malloc(sizeof(char)*BUFFER_SIZE);
char *line = malloc(sizeof(char)*BUFFER_SIZE);
while((read(STDIN_FILENO, buffer, BUFFER_SIZE))>0){
line = readLine(buffer);
doStuffWithLine(line);
printf("%s", line);
}
return 0;
}
这是输入文件内容:
lol1
lol2
lol3
这是我程序的输出:
lol1
Segmentation fault (core dumped)
我想知道如何阅读第 2 行和第 3 行,解决它,并解释一下我做错了什么,因为我不明白这个问题。
提前致谢。
函数 read
读取原始字节,不会用字符串终止字符终止缓冲区 '[=11=]'
;然后将它用于 printf("%s",...)
,它需要一个 0
终止的 C 字符串,会产生未定义的行为(例如崩溃)。
我建议改用 fgets
。
首先感谢所有帮助过我并花了一些时间尝试的人。
在花了几个小时学习和绞尽脑汁后,我找到了解决方案。总之我是***** 菜鸟
如果有人遇到同样的问题,我将提交我的代码。简单易行:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
char* doStuff(char* line){
return line;
}
int main(int argc, char *argv[])
{
char *line = malloc(sizeof(char)*LINE_MAX);
while(fgets(line, LINE_MAX, stdin)!= NULL)
{
line = doStuff(line);
printf("%s", line);
}
return 0;
}
我正在尝试逐行读取标准文件输入。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUFFER_SIZE 1204
char* readLine(char* buffer){
int i = 0;
for(i; i< BUFFER_SIZE; i++){
printf("%c",buffer[i]);
if( '\n' == buffer[i]){
char* line[124];
memcpy( line, &buffer[0], i-1 );
return *line;
}
}
free(buffer);
}
int doStuffWithLine(char* line){
return 1;
}
int main(int argc, char *argv[])
{
ssize_t aux1;
char *buffer = malloc(sizeof(char)*BUFFER_SIZE);
char *line = malloc(sizeof(char)*BUFFER_SIZE);
while((read(STDIN_FILENO, buffer, BUFFER_SIZE))>0){
line = readLine(buffer);
doStuffWithLine(line);
printf("%s", line);
}
return 0;
}
这是输入文件内容:
lol1
lol2
lol3
这是我程序的输出:
lol1
Segmentation fault (core dumped)
我想知道如何阅读第 2 行和第 3 行,解决它,并解释一下我做错了什么,因为我不明白这个问题。
提前致谢。
函数 read
读取原始字节,不会用字符串终止字符终止缓冲区 '[=11=]'
;然后将它用于 printf("%s",...)
,它需要一个 0
终止的 C 字符串,会产生未定义的行为(例如崩溃)。
我建议改用 fgets
。
首先感谢所有帮助过我并花了一些时间尝试的人。
在花了几个小时学习和绞尽脑汁后,我找到了解决方案。总之我是***** 菜鸟
如果有人遇到同样的问题,我将提交我的代码。简单易行:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
char* doStuff(char* line){
return line;
}
int main(int argc, char *argv[])
{
char *line = malloc(sizeof(char)*LINE_MAX);
while(fgets(line, LINE_MAX, stdin)!= NULL)
{
line = doStuff(line);
printf("%s", line);
}
return 0;
}