我寫了這個功能:Linux的非確定性的行爲採取輸入
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等於標準輸入。
我已經使用過很多次了,它可以工作。
我只是在這種情況下fgets的結果是fp是一個FILE指針,所以我必須檢查結果是不是NULL的情況下流不適合輸入操作。
的問題是,如果我用這種方式:
char buffer[LMAX]; // LMAX = 100, defined constant
input(buffer,stdin);
puts(buffer);
如果輸入的是像「#dest:一」看跌期權打印「#dest」,切割string.The大問題的其餘部分如果我在輸入「#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:一個」。
此功能有時有效,有時不起作用,我是K.O.,我無法忍受非確定性行爲,可能是這個問題(也可能是錯誤)導致的?
如果初始化緩衝區會怎麼樣? ''char buffer [LMAX] = {0};'' – Fred
你使用的編譯器是什麼?我想知道你怎麼能編譯「const unsigned int length = strlen(buffer);」 – Donotalo
@Donotalo const const unsigned int length = strlen(buffer);'? –