2016-06-20 116 views
1

我想掃描一個字符串並指向指向此掃描字符串的指針charscanf字符指針中的字符串

int main(int argc, char *argv[]) { 

    char *string; 
    scanf("%s",&string); 
    printf("%s\n",string); 

} 

但發出警告說

警告:格式 '%s' 的預期類型 '的char *' 的說法,但參數2 的類型爲 '字符**'

如何在沒有警告的情況下掃描char *中的字符串。

編輯:它適用於下面的代碼與警告,我鑽到它以上是非常具體的。

int main(int argc, char *argv[]) { 

    int n = 2; 

    char *strings[2]; 
    for(int i = 0; i < n; i++){ 
     scanf("%s",&strings[i]); 
     printf("%s\n",&strings[i]); 
    } 

} 
所有的

enter image description here

+1

首先爲字符串變量分配內存,然後只傳遞'string'而不是'&string'。 – Jeyaram

+0

換句話說,當你還沒有想出如何分配內存緩衝區時,你正在問如何讓編譯器錯誤消失。 –

+0

...或使用固定長度的字符串。這取決於你正在閱讀的計劃。 – Kusalananda

回答

5

首先,%sscanf()需要一個指針char,不是指針指向char

引用C11,章§7.21.6.2/ P12,fscanf()重點礦山

s
匹配的非空白字符的序列。 286)

如果沒有l長度改性劑的存在,對應的參數應是 指針的字符數組的初始元素足夠大,以接受 序列和終止空字符,這將被添加自動。 [...]

變化

scanf("%s",&string); 

scanf("%s",string); 

這就是說,你需要分配內存以string之前,你真正嘗試掃描進去。否則,你最終會使用調用undefined behavior的未初始化指針。