如何从buffer里按行读取数据?

zalyer 2011-11-22 06:53:24
我用read从文件里读出了一些数据到buffer,buffer比较大。
read(fd,buffer,size);

比如当前buffer中是:
aaa
bbb
ccc

怎么按行读取buffer中的数据?谢谢

...全文
1325 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zalyer 的回复:]

我是希望用read把很多数据一次读到buffer中,然后再一行一行处理.
如果用fgets一行一行读,速度太慢, 大家有什么建议
[/Quote]

好好看C语言吧,你的幼稚很丢脸。
qq120848369 2011-11-23
  • 打赏
  • 举报
回复
哎,你知道C标准I/O库的实现么,真能抖擞。

如果FILE*都没有缓冲,这世界就都别缓冲了。
zalyer 2011-11-23
  • 打赏
  • 举报
回复
兄弟们,已经找到方法,用strtok可以搞定!
qq2623102025 2011-11-23
  • 打赏
  • 举报
回复
不好意思,我确实坑爹了。我的方法只能去单词。
qq2623102025 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qq120848369 的回复:]
引用 3 楼 qq2623102025 的回复:

我这里写了个小程序,希望能解决LZ的问题。buff中的数据如下:“aaa\nbbb\nccc\n”,\n为换行符,从buff中按行读出每行数据。
C/C++ code

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

/*
该函数从buff中读出一行,并打……
[/Quote]
你才坑爹吧。LZ是要从一个很大的buff里读取处理的数据,fgets是从一个流里面读取数据。我觉得我的方法完全可以,没什么坑爹。
ak_kay 2011-11-23
  • 打赏
  • 举报
回复
读到map,把'\n'-->'\0',移动指针提取。
zalyer 2011-11-22
  • 打赏
  • 举报
回复
我是希望用read把很多数据一次读到buffer中,然后再一行一行处理.
如果用fgets一行一行读,速度太慢, 大家有什么建议
zalyer 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qq120848369 的回复:]
fgets.
[/Quote]

这个不是从文件一行一行读吗?
qq120848369 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qq2623102025 的回复:]

我这里写了个小程序,希望能解决LZ的问题。buff中的数据如下:“aaa\nbbb\nccc\n”,\n为换行符,从buff中按行读出每行数据。
C/C++ code

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

/*
该函数从buff中读出一行,并打印到标准输出上
传入参数为此次读取开始位置
返回下次读取开始位置
……
[/Quote]

你这是取一个单词,别坑爹。
qq2623102025 2011-11-22
  • 打赏
  • 举报
回复
我这里写了个小程序,希望能解决LZ的问题。buff中的数据如下:“aaa\nbbb\nccc\n”,\n为换行符,从buff中按行读出每行数据。

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

/*
该函数从buff中读出一行,并打印到标准输出上
传入参数为此次读取开始位置
返回下次读取开始位置
*/
char* getLine(char* buff)
{
char* pos = buff;
char tmp[20];

memset(tmp, 0, sizeof(tmp));
//该函数将缓冲区中的一行数据格式化到tmp中
sscanf(pos, "%s", tmp);

printf("%s\n", tmp);

pos += strlen(tmp);
pos++;

return pos;
}
int main()
{
char buff[1024];
char* pos = buff;

memset(buff, 0, sizeof(buff));
sprintf(buff, "%s", "aaaa\nbbbb\nccccc\n");

pos = getLine(pos);
pos = getLine(pos);
pos = getLine(pos);

return 0;
}
liutengfeigo 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qq120848369 的回复:]

fgets.
[/Quote]
++
qq120848369 2011-11-22
  • 打赏
  • 举报
回复
fgets.

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧