在C中使用getchar()时出现分段错误(核心转储)?
我正在为一个类编写程序,需要从标准输入中接收字符串。我使用的是getchar(),但是当我运行程序时,当遇到含有getchar()的循环时,它似乎会产生分段错误。这是我的密码: (输入示例为:514:09:011013)在C中使用getchar()时出现分段错误(核心转储)?,c,C,我正在为一个类编写程序,需要从标准输入中接收字符串。我使用的是getchar(),但是当我运行程序时,当遇到含有getchar()的循环时,它似乎会产生分段错误。这是我的密码: (输入示例为:514:09:011013) 调用atoi()的代码行在应该传递指针时传递一个字符作为参数。改变 patientNumber = atoi(input[i]); 到 类似地,对于命令=atoi(输入[i])行 我原以为编译器会对此进行诊断 char input[50]; while((c = getcha
调用
atoi()
的代码行在应该传递指针时传递一个字符作为参数。改变
patientNumber = atoi(input[i]);
到
类似地,对于命令=atoi(输入[i])代码>行
我原以为编译器会对此进行诊断
char input[50];
while((c = getchar()) != '\n' && c != EOF){
input[i++] = c;
}
我不确定这是否是您的错误,但如果键入的字符超过50个(后跟“\n”),则会损坏堆栈(很可能会崩溃)
建议的解决办法:
input[0] = '\0';
const int maxlen = sizeof(input)/sizeof(input[0]);
while (i < (maxlen-1))
{
c = getchar();
if ((c == '\n') || (c == EOF))
{
break;
}
input[i] = ch;
input[i+1] = '\0';
i++;
}
输入[0]='\0';
const int maxlen=sizeof(输入)/sizeof(输入[0]);
而(i<(maxlen-1))
{
c=getchar();
如果((c='\n')| |(c==EOF))
{
打破
}
输入[i]=ch;
输入[i+1]='\0';
i++;
}
是否有可能有超过50个字符的输入行,当第一个字段的数字大于10时,我认为您没有正确解析patientNumber
。尝试以null结尾的代码行valueString
和time
将null字符放在超出其应放的位置的一个元素上,因此在这些字符串的末尾将有一个垃圾字符。通过调试器逐步完成这一过程和/或抛出一些调试输出可能会有好处代码>,不应在其终止时+1'。它们的索引已经在终止符需要的位置,因为您在解析期间设置了值并增加了索引变量。应该是valueString[valueCount]=0编辑:对不起,迈克尔,我刚才看到了你的第二条评论。谢谢大家的反馈。我修复了valueString和时间索引问题,但仍然得到了错误。输入总是以特定的方式格式化,因此字符过多不应该是错误。我将数组大小更改为100只是为了确保仍然得到相同的错误。我在getchar()while循环中放了一个print语句,它从不打印,但在该循环之前的所有内容都会打印,这就是为什么我认为该循环是问题的根源。
patientNumber = atoi(&input[i]);
char input[50];
while((c = getchar()) != '\n' && c != EOF){
input[i++] = c;
}
input[0] = '\0';
const int maxlen = sizeof(input)/sizeof(input[0]);
while (i < (maxlen-1))
{
c = getchar();
if ((c == '\n') || (c == EOF))
{
break;
}
input[i] = ch;
input[i+1] = '\0';
i++;
}