如何解决如何从stdin到字符串获取值
我只能使用退出,打开,关闭,写入,读取,malloc ,并且免费。 为什么不将缓冲区写入字符串?
file = 0;
char *ft_stdin(int file)
{
char buffer[BUFFER_SIZE + 1];
char *str_map;
int r;
str_map = malloc(sizeof(*str_map) * BUFFER_SIZE + 1);
while ((r = read(file,buffer,BUFFER_SIZE)) == '\0')
{
buffer[r] = '\0';
str_map = buffer;
}
return (str_map);
}
解决方法
-
您在函数内部声明了动态内存,这是错误的,因为您可以松开引用并从不释放内存,许多C函数将指针作为参数,因为程序员是在分配/释放内存。
>
-
您要分配一个本地作用域内存地址,它在堆栈中到堆内存地址中,因此,当函数返回时,您会释放缓冲区内容,这与C语言中的noter languajes不同,您需要使用库函数。
因此,有这两个注释,您想这样做。
在分配内存的功能之外:
char * str_map = malloc(.....);
并为此修改功能:
char *ft_stdin(int file,char * ptr)
{
....
while ((r = read(file,buffer,BUFFER_SIZE)) == '\0')
{
buffer[r] = '\0';
// Here you actually are copiying the string.
for(int i = 0; i <= r; i++) {
ptr[i] = buffer[i];
}
}
return (str_map);
}
您需要确保不会溢出ptr变量,然后释放它。
如果需要,可以使用静态内存,但是关键概念是您不能返回本地函数作用域的内存地址,并且需要手动复制字符串或在C中通过strcpy复制字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。