gpt4 book ai didi

c - 在函数中增加字符串大小时,realloc() 无效指针错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:33:07 24 4
gpt4 key购买 nike

当我运行代码时,它显示 realloc() 无效指针错误。

input() 函数有什么问题吗?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
char *input(void)
{
int n = 1;
char *str = malloc(sizeof(char));
*str = '\0';
while((*str=getchar())!='\n')
{
n++;
str = realloc(str,sizeof(char)*n);
str++;
}
return str;
}

int main(int argc, char const *argv[])
{
char *str = input();
printf("%s",str);
free(str);
return 0;
}

最佳答案

你犯了一些错误:

  • 您返回字符串的结尾,而不是开头。

  • realloc 需要原始地址(见 Thomas 的回答)

  • realloc 可能会返回一个新地址

  • 您没有终止字符串。

以下修复了这些错误并包含了一些建议:

char *input(void)
{
size_t i=0;
int c;
char *str = malloc(1);
if (!str) return 0;
while((c=getchar())!=EOF && c!='\n')
{
str[i]= c;
if ((newstr = realloc(str,i+1))==0)
break; // out of memory: return what we have
str= newstr;
i++;
}
str[i]= '\0';
return str;
}

关于c - 在函数中增加字符串大小时,realloc() 无效指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53130276/

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