c - 一行输入后程序崩溃。怎么修?
问题描述
我制作了一个我的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
。指针本身不会自动指向任何有效内存。除非正确初始化,否则尝试使用(或取消引用)它们会导致未定义的行为。
有两种常用方法可以实现您想要的(根据您的要求):
- 在编译时分配大小并限制输入的长度[即,将缓冲区的大小作为函数参数传递,例如
fgets()
] - 在运行时分配内存(分配器函数
malloc()
和 family)并根据输入长度调整大小。
推荐阅读
- data-structures - 红黑树什么时候左倾?
- junit - 来自 AEM 的 Solr 索引文档的 Junit
- google-apps-script - 缓慢的请求/响应 - 使用 App Inventor 的 Google OCR API
- python - 如何在熊猫的数据框上使用函数?
- sql - 凌乱的 SQL 查询需要更高效
- c# - google drive v2 发布后提示登录
- locale - 为什么 CentOs 6.9 和 Ubuntu 18.04 之间的西班牙语言环境排序顺序不同?
- postgresql - PostgreSQL 从每个递归中只选择最后一行
- javascript - JS 在 PHP 可以发送电子邮件之前删除表单数据
- selenium-chromedriver - selenium-chromedriver:是否可以访问浏览器 Inspector-Network 页面中的所有内容?