gpt4 book ai didi

c - 输入一行后程序崩溃了。怎么修?

转载 作者:行者123 更新时间:2023-11-30 20:47:53 26 4
gpt4 key购买 nike

我编写了一个我自己的getline函数的程序。它接受输入直到遇到 '\n' 并转移到下一个输入。另外,我在这里使用指针数组来存储字符串输入,但程序在第一个字符串输入后崩溃。有什么问题吗?

这是程序的代码。我尝试过调试它,但是我找不到这里的问题。

#include<stdio.h>
#include<stdlib.h>

void getline2(char *s)
{
char c;
while((c=getchar())!='\n')
{
*s=c;
s++;
}
*s='\0';
}

int main()
{
char *lines[3];
int i=0;
while(i<3)
{
getline2(lines[i]);
i++;
}
for (i = 0; i < 3; i++)
{
printf("\n%s", lines[i]);
}
return 0;
}

当我按回车键输入第一行时,程序崩溃了。

最佳答案

在您的代码中,char *lines[3]; 定义了 char 指针数组。指针本身不会自动指向任何有效内存。除非正确初始化,否则尝试使用(或取消引用)它们将导致 undefined behavior .

有两种常见方法可以实现您想要的目标(根据您的要求):

  • 在编译时分配大小并限制输入的长度[即,将缓冲区的大小作为函数参数传递,例如 fgets() ]
  • 在运行时分配内存(分配器函数 malloc() and family )并根据输入长度调整大小。

关于c - 输入一行后程序崩溃了。怎么修?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54002322/

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