【C語言】從stdin讀取一行字串的多種方法
1. gets
gets函式的標頭檔案是<stdio.h>,原型如下:
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. 5.int main() 6.{ 7. int size = 1024; 8. char* buff = (char*)malloc(size); 9. 10. // read lines 11. while(NULL != gets(buff)){ 12. printf("Read line with len: %d\n", strlen(buff)); 13. printf("%s", buff); 14. } 15. 16. // free buff 17. free(buff); 18.}
2. fgets
fgets函式的標頭檔案是<stdio.h>,原型如下:
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. 5.int main() 6.{ 7. int size = 1024; 8. char* buff = (char*)malloc(size); 9. 10. // read lines 11. while(NULL != fgets(buff, size, stdin)){ 12. printf("Read line with len: %d\n", strlen(buff)); 13. printf("%s", buff); 14. } 15. // free buff 16. free(buff); }
3.
3. getline
getline函式的標頭檔案是<stdio.h>,原型如下:
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'
1.#include <stdio.h>
2.#include <stdlib.h>
3.
4.int
5.main(void)
6.{
7. char *line = NULL;
8. size_t len = 0;
9. ssize_t read;
10.
11. while ((read = getline(&line, &len, stdin)) != -1) {
12. printf("Retrieved line of length %zu, %u :\n", read, len);
13. printf("%s", line);
14. }
15.
16. free(line);
17. exit(EXIT_SUCCESS);
18.}
1. 自己實現my_getline
可以自己實現,原型如下:
int my_getline(char* line, intmax_size);
my_getline從stdin中讀取最多max_size-1個字元到line所指定的buff中,當遇到換行符或EOF時讀取結束。讀取成功時,返回讀取的字串長度;失敗時返回0。my_getline讀取的內容中會包括行末尾的'\n'字元。
1.#include <stdio.h>
2.#include <stdlib.h>
3.
4.int my_getline(char* line, int max_size)
5.{
6. int c;
7. int len = 0;
8. while( (c = getchar()) != EOF && len < max_size ){
9. line[len++] = c;
10. if('\n' == c)
11. break;
12. }
13.
14.
15. line[len] = '\0';
16. return len;
17.}
18.
19.int main()
20.{
21. int max_size = 1024;
22. char* buff = (char*)malloc( sizeof(char) * max_size );
23.
24. //getline
25. int len;
26. while(0 != (len = my_getline(buff, max_size))){
27. printf("Read line with len: %d\n", len);
28. printf("%s", buff);
29. }
30.
31. free(buff);
32.}