我写了这个函数:
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”。
此功能有时有效,有时无效,我是 KO,我无法忍受非确定性行为,这个问题(可能是错误)可能是由什么引起的?