gpt4 book ai didi

c - size_t 在 C 中的 getline 中转换

转载 作者:行者123 更新时间:2023-11-30 15:28:21 25 4
gpt4 key购买 nike

我刚刚发现 gets 已被弃用,并且由于可靠性问题不推荐使用 scanf,所以我正在尝试 getline()。

如果我声明一个 size_t 变量并为其分配要使用的字节数,我可以毫无问题地使用 getline。

我明白,如果我想要 getline 为我分配内存,我必须将第二个参数(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,因此出现错误。

最佳答案

因为&size不是空指针。它是包含0的对象的有效地址,这与指针为0并且指向任何地方不同。

顺便说一句,gets 已从 C 标准中删除,但 fgets 并未删除。这就是可移植 C 语言的发展方向。

关于c - size_t 在 C 中的 getline 中转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26639839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com