虽然上述方法确实可行,但每种方法都有各自的问题。
如果您使用支持POSIX的平台,则可以使用getline()
或getdelim()
。如果您使用Windows和MinGW作为编译器,则应该可以使用它们。
getline()
被定义为:
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
为了输入,首先需要创建一个指向char类型的指针。
#include <stdio.h>
#include<stdlib.h>
char *s;
size_t size = 10;
int main(){
s = (char *)malloc(size+1);
getline(&s,&size,stdin);
printf("%s",s);
return 0;
}
示例输入:Hello world to the world!
输出:Hello world to the world!\n
需要注意的一件事是,即使为s分配的内存为11个字节,而输入大小为26个字节,getline()
仍然使用realloc()
重新分配s
。
因此,您的输入有多长并不重要。
size
会随着读取的字节数更新,根据上面的示例输入,size
将为27
。
getline()
还将\n
视为输入。因此,您的's'将在末尾保留'\n'。
还有更通用的getline()
版本,即getdelim()
,它需要一个额外的参数,即delimiter
。
getdelim()
定义如下:
ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
Linux man page