首页 > 解决方案 > 一行输入后程序崩溃。怎么修?

问题描述

我制作了一个我的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;
}

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

标签: cpointersgetline

解决方案


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

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

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

推荐阅读