2015-11-01 41 views
1

我知道asprintf寫入一個字符串,它也會自動分配。而且,STDIN是輸入緩衝區。結合這兩個具體事實,我想寫一個函數接受一個字符串並自動分配存儲空間。我也意識到手動做這種替代方法。我只是好奇,如果這可能是一種替代方式。在C中掃描字符串時自動分配

這裏是我的方法,

int main() 
{ 

    char *str; 
    int i; 
    __fpurge(stdin);    //To clear contents of stdin 
    asprintf(&str,"%10s",stdin); //To take only 10 characters 
    if(str) 
    { printf("Read %d characters -> %s",i,str); 
     free(str); 
    } 

} 

但是,我得到這樣的事情 - >

讀11個字符 - > //其次是一些亂碼

任何幫助將大大讚賞。

+0

嘗試'的scanf(「%10毫秒%N」,及海峽,&i);'或'getline' – BLUEPIXY

回答

2

您的代碼無效。 stdin的類型爲FILE *,而asprintf預計爲char *(因爲轉換說明符爲%s)。

如果你想從stdin閱讀,您需要使用它的設計從
FILE *,例如閱讀功能fgetsfscanf

+0

我明白了這個安全漏洞。有沒有一種方法,由此我可以使用asprintf閱讀從標準輸入字符串? – Enqueue

+1

不,'asprintf'和'printf'家族的其他成員沒有從文件讀取的機制。 – user3386109