[关闭]
@songpfei 2016-04-03T12:13:12.000000Z 字数 1383 阅读 9006

C/C++ 读入一行字符串

常用代码积累


1.gets

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

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. int size = 1024;
  7. char* buff = (char*)malloc(size);
  8. // read lines
  9. while(NULL != gets(buff)){
  10. printf("Read line with len: %d\n", strlen(buff));
  11. printf("%s", buff);
  12. }
  13. // free buff
  14. free(buff);
  15. }

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函数获得。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. int size = 1024;
  7. char* buff = (char*)malloc(size);
  8. // read lines
  9. while(NULL != fgets(buff, size, stdin)){
  10. printf("Read line with len: %d\n", strlen(buff));
  11. printf("%s", buff);
  12. }
  13. // free buff
  14. free(buff);
  15. }

需要注意的是fgets保留换行符'\n',而gets是从stdin输入,在读取字符串时会删除结尾的换行符'\n';
同样,fputs写入时不包括换行符,而puts在写入字符串时会在末尾添加一个换行符。

3. getline

对于C++语言,如果使用C字符串的话,就采用cin.getline()函数,如果采用string型字符串的话,就采用全局函数getline(cin,n);

注意,这两个函数都不读入最后的换行符

  1. #include<string>
  2. #include<iostream>
  3. using namespace std;
  4. int main( )
  5. {
  6. string s;
  7. char str[256];
  8. getline(cin, s);
  9. cin.getline(str, sizeof(str));
  10. return 0;
  11. }

参考:http://www.cnblogs.com/xkfz007/archive/2012/08/02/2619446.html
非常值得看的博客http://www.cnblogs.com/xkfz007/archive/2012/02/27/2363810.html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注