【发布时间】:2014-10-29 20:16:17
【问题描述】:
我刚刚发现gets已被弃用,并且由于可靠性问题不推荐使用scanf,所以我正在尝试getline()。
如果我声明一个 size_t 变量并为其分配要使用的字节数,我可以毫无问题地使用 getline。
我知道,如果我想让 getline 为我使用 memalloc,我必须将第二个参数(size_t * one)分配为零,并将 char ** 分配给 NULL。它有效:
int main(){
int read;
size_t zero = 0;
char *A;
A=NULL;
printf("Write something:\n");
read=getline(&A, &zero, stdin);
if(read!= -1) puts(A);
return 0;
}
如果我将零分配给变量,它可以工作,但为什么我不能像这样不声明变量并强制转换零 (0):
int main(){
int read;
//size_t zero = 0;
char *A;
A=NULL;
printf("Write something:\n");
read=getline(&A, (size_t *)0, stdin);
if(read!= -1) puts(A);
return 0;
}
最后一段代码编译正常,但是getline返回-1,所以报错。
【问题讨论】:
-
您使用的最大长度(在好的版本中)为 0,因此不会读取任何字符。