在C中使用getchar()时出现分段错误(核心转储)?

在C中使用getchar()时出现分段错误(核心转储)?,c,C,我正在为一个类编写程序,需要从标准输入中接收字符串。我使用的是getchar(),但是当我运行程序时,当遇到含有getchar()的循环时,它似乎会产生分段错误。这是我的密码: (输入示例为:514:09:011013) 调用atoi()的代码行在应该传递指针时传递一个字符作为参数。改变 patientNumber = atoi(input[i]); 到 类似地,对于命令=atoi(输入[i])行 我原以为编译器会对此进行诊断 char input[50]; while((c = getcha

我正在为一个类编写程序,需要从标准输入中接收字符串。我使用的是getchar(),但是当我运行程序时,当遇到含有getchar()的循环时,它似乎会产生分段错误。这是我的密码:

(输入示例为:514:09:011013)


调用
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]=0patientNumber = 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++;
}