C语言从stdin读取一行字符串的几种方法

您所在的位置:网站首页 c++读取整行字符串 C语言从stdin读取一行字符串的几种方法

C语言从stdin读取一行字符串的几种方法

2024-07-12 02:17| 来源: 网络整理| 查看: 265

C语言从stdin读取一行字符串的几种方法

1.gets

gets函数的头文件是,原型如下:

char *gets(char *s);

gets从stdin中读入一行内容到s指定的buffer中,当遇到换行符或EOF时读取结束。读取成功时,返回s地址;失败时返回null。需要注意的是,gets会将行末尾的’\n’字符或EOF替换成’\0’,这样,gets读取的内容中不包括’\n’字符。如果要获取读取字符串的长度,可以调用strlen函数获得。

#include #include #include int main() { int size = 1024; char* buff = (char*)malloc(size); // read lines while(NULL != gets(buff)){ printf("Read line with len: %d\n", strlen(buff)); printf("%s", buff); } // free buff free(buff); } 2.fgets

fgets函数的头文件是,原型如下:

char *fgets(char *s, int size, FILE*stream);

fgets从stream中读取最多size-1大小的内容到s指定的buffer中,当遇到换行符或EOF时读取结束。读取成功时,返回s地址;失败时返回null。需要注意的是,fgets会在所读取的内容后面添加’\0’,这样,fgets读取的内容中会包括行末尾的’\n’字符。如果要获取读取字符串的长度,可以调用strlen函数获得。

#include #include #include int main() { int size = 1024; char* buff = (char*)malloc(size); // read lines while(NULL != fgets(buff, size, stdin)){ printf("Read line with len: %d\n", strlen(buff)); printf("%s", buff); } // free buff free(buff); } 3.getline

getline函数的头文件是,原型如下:

ssize_t getline(char **lineptr,size_t *n, FILE *stream);

getline从stream中读取一行内容到lineptr所指定的buffer中,当遇到换行符或EOF时读取结束。*n是lineptr所指定的buffer的大小,如果*n小于读入的内容长度,getline会自动扩展buffer长度,并更新lineptr和n的值。读取成功时,返回读入的字符个数;失败时返回-1。需要注意的是,gelines读取的内容中会包括行末尾的’\n’字符。

#include #include int main(void) { char *line = NULL; size_t len = 0; ssize_t read; while ((read = getline(&line, &len, stdin)) != -1) { printf("Retrieved line of length %zu, %u :\n", read, len); printf("%s", line); } free(line); exit(EXIT_SUCCESS); } 4.自己实现my_getline

可以自己实现,原型如下:

int my_getline(char* line, intmax_size);

my_getline从stdin中读取最多max_size-1个字符到line所指定的buff中,当遇到换行符或EOF时读取结束。读取成功时,返回读取的字符串长度;失败时返回0。my_getline读取的内容中会包括行末尾的’\n’字符。

#include #include int my_getline(char* line, int max_size) { int c; int len = 0; while( (c = getchar()) != EOF && len < max_size ){ line[len++] = c; if('\n' == c) break; } line[len] = '\0'; return len; } int main() { int max_size = 1024; char* buff = (char*)malloc( sizeof(char) * max_size ); //getline int len; while(0 != (len = my_getline(buff, max_size))){ printf("Read line with len: %d\n", len); printf("%s", buff); } free(buff); }

参考:

[1] Linux Programmer’s Manual.

[2] Brian W. Kernighan and Dennis M.Ritchie. The C Programming Language, Second Edition.

———————————————— 版权声明:本文为CSDN博主「大唐游子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lichengyu/article/details/41621099



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3