分类: C/C++
2012-01-22 21:06:50
功能:字符串行输入。读取文件stream的一行,读取内容存放于*lineptr中,读取长度为*n.
声明:
#define _GNU_SOURCE
#include
#include
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
实例:
#define _GNU_SOURCE
#include
#include
int
main(void)
{
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
fp = fopen("/etc/motd", "r"); //motd是登陆欢迎消息存放的文件
if (fp == NULL)
exit(EXIT_FAILURE);
while ((read = getline(&line, &len, fp)) != -1) {
printf("Retrieved line of length %zu :\n", read);
//%zu中的z表示是由size_t或者ssize_t转换成unsgned int
printf("%s", line);
}
if (line)
free(line);
return EXIT_SUCCESS;
}
运行效果:
编程心得:
使用getline在获取行输入时不用担心接收缓存溢出,因为接收时只需要提供一个NULL地址的指针即可,接收的数据长度也可以通过int指针获取。
在本例中,对line其实使用的是二级指针,即指向line地址的指针。
char * line = NULL;
printf("line:%#x\n",&line); //显示值为line:0xbff42bd8
printf("line:%#x\n",line); //显示值为line:0
即空地址(NULL)也可以有地址。
char * line = NULL;
*line line &line
值 未知 0 0xbff42bd8