C语言 重新定位两次后的隔离错误



我试图编写一个函数,该函数在没有给定长度的情况下接受输入。 当我尝试获取单个输入时,ıt 有效,但如果我想获取多个输入,则会出现段错误。下面是代码:

char* getinput()
    {
    char c,*str=0,*tmp=0;
    int i=0;
    while(c)
    {
            c=getchar();
            if(c!=EOF && c!='n')
        {
            if(!(tmp=realloc(str,(i+1)*sizeof(char))))
            {
            free(str);
            return NULL;
            }
        str=tmp;
        str[i++]=c;
        }
        else c=0;
    }
    str[i]=0;
    return str;
}

当我尝试获取单个输入时,我可以打印字符串:

string1      
string1

当我尝试获取多个输入时,我无法:

string1
Segmentation fault (core dumped)

还有另一个变量 string2。我感谢任何帮助。谢谢。

假设您输入了一个字符

您将分配一个一个字节的缓冲区,将字符写入其中,然后增加索引并执行以下操作:

str[i]=0;

此时i==1和你正在str分配的边界之外写作:未定义的行为

我建议您将缓冲区大小增加 1:

if(!(tmp=realloc(str,(i+2)))

(并降低sizeof(char)位,因为它保证为 1(

更有效的技术是"不时"重新分配,像大多数向量分配器那样跟踪分配缓冲区的容量,而不是每次。

相关内容

  • 没有找到相关文章

最新更新