如何在C中创建一个返回下一行输入的函数
我对C相当陌生,所以作为我学习的一部分,我想创建一个函数,它只返回一个字符串,该字符串是输入中的下一行,不需要任何参数 这就是我到目前为止所做的:如何在C中创建一个返回下一行输入的函数,c,fgets,c-strings,calloc,C,Fgets,C Strings,Calloc,我对C相当陌生,所以作为我学习的一部分,我想创建一个函数,它只返回一个字符串,该字符串是输入中的下一行,不需要任何参数 这就是我到目前为止所做的: #define BUFFER 256 char *str; char *getline() { if (str == 0) str = (char*)calloc(BUFFER, sizeof(char)); if (fgets(str, BUFFER, stdin) != 0) { size_
#define BUFFER 256
char *str;
char *getline()
{
if (str == 0)
str = (char*)calloc(BUFFER, sizeof(char));
if (fgets(str, BUFFER, stdin) != 0)
{
size_t len = strlen(str);
if (len > 0 && str[len-1] == '\n')
str[len-1] = '\0';
return str;
}
return 0;
}
现在,这是做这件事的最好方法吗?你有没有更好的方法来处理这件事?
如果这是最好的方式,我应该在哪里释放我分配的
calloc
?这是可行的,但这里有一些注意事项需要记住:
- 您甚至不需要
-calloc()
NUL终止字符串fgets()
- 更好的方法是使用
数组静态
- 不要使用全局变量。用
存储持续时间声明static
str
- 使用
,而不是256个字符-为什么一行只能短于256个字符LINE\u MAX
是POSIX C库中函数的名称。重命名函数以避免名称冲突getline()
- 检查
是否失败强>malloc()
- 如果使用动态内存管理的方法,请不要忘记在读取最后一行后
函数的返回值free()
- 换行符结尾的检查可以简化如下:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
char *my_getline_stdin()
{
static char buf[LINE_MAX];
if (fgets(buf, sizeof(buf), stdin)) {
char *p = strchr(buf, '\n');
if (p)
*p = 0;
return buf;
}
return NULL;
}
总之,我要写的函数是这样的:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
char *my_getline_stdin()
{
static char buf[LINE_MAX];
if (fgets(buf, sizeof(buf), stdin)) {
char *p = strchr(buf, '\n');
if (p)
*p = 0;
return buf;
}
return NULL;
}
#包括
#包括
#包括
#包括
char*my_getline_stdin()
{
静态字符buf[LINE_MAX];
if(fgets(buf、sizeof(buf)、stdin)){
char*p=strchr(buf,'\n');
如果(p)
*p=0;
返回buf;
}
返回NULL;
}
谁负责释放str
?如果线路长度超过256怎么办?如果没有参数,就无法安全地执行此操作。哦,str
应该是本地的或数组。@H2CO3您对getline-str==0
的此接口满意吗?这是一个伪装成公共字段的单态对象。@Elazar我不明白你的意思…@H2CO3,但你确实修正了你的答案。