C语言从stdin读取一行字符串的几种方法 |
您所在的位置:网站首页 › c++读取整行字符串 › C语言从stdin读取一行字符串的几种方法 |
C语言从stdin读取一行字符串的几种方法 1.getsgets函数的头文件是,原型如下: 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.fgetsfgets函数的头文件是,原型如下: 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.getlinegetline函数的头文件是,原型如下: 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 |