Linux非确定性行为接受输入

时间:2012-05-29 10:02:31

标签: c

我写过这个函数:

char* input(char* buffer, FILE* fp)
{
    char* result=fgets(buffer,LMAX,fp);
    if(result!=NULL)
    {
    const unsigned int length=strlen(buffer);
    if(buffer[length-1]=='\n')
        buffer[length-1]='\0';
    }
    return result;
}

如果fp等于stdin,则只输入一行文本 我已经多次使用它并且它有效 我只是在fp是FILE指针的情况下获取fgets的结果,所以在流不适合输入操作的情况下,我必须检查结果是否为NULL。
问题是,如果我这样使用它:

char buffer[LMAX];  // LMAX = 100, defined constant
input(buffer,stdin);
puts(buffer);

如果输入类似于“#dest:a”,则puts会打印“#dest”,切断字符串的其余部分。最大的问题是这个功能正在工作,一小时前(它完全相同)如果我确实输入了一个字符串,如“#dest:a”,puts正在打印“#dest:a”。没有任何改变。如果我尝试调试并写下这个:

char* input(char* buffer, FILE* fp)
{
    char* result=fgets(buffer,LMAX,fp);
    puts(buffer);  //prints always "#dest :a"
    if(result!=NULL)
    {
    const unsigned int length=strlen(buffer);
    if(buffer[length-1]=='\n')
        buffer[length-1]='\0';
    }
    return result;
}

问题是在函数中打印“#dest:a” 这个功能有时是有效的,有时候不行,我是K.O.,我不能忍受一个非确定性的行为,这可能是什么问题(可能是一个bug)?

1 个答案:

答案 0 :(得分:1)

我运行了你的代码几次,我只得到正确的输出,所以我无法重现问题。我认为我知道问题是什么。试着打电话

    flush(stdin);
在您致电输入之前