2012-05-05 75 views
0

我收到編譯錯誤「new_str = combine_string(newstr,」test「);」錯誤:傳遞ARG`combine_string」的1來自兼容的指針類型傳遞來自不兼容指針類型的`combine_string'的arg 1

char * combine_string(char *, char *); 

.... 

char *new_str; 
new_str = newstr(item, strlen(item)); 
new_str = combine_string(newstr, "test"); 

... 

char * combine_string(char *name, char *name2) 
{ 
    char *retval; 

    retval = erealloc(retval, (strlen(name) + strlen(name2) + 1)); 
    if (retval != NULL) 
     sprintf(retval, "%s%s", name, name2); 
    else 
     free(name); //Wouldn't use it any longer 
    return retval; 
} 

... 


char *newstr(char *s, int l) { 
    char *rv = emalloc(l + 1); 

    rv[l] = '\0'; 
    strncpy(rv, s, l); 
    return rv; 
} 
+0

new_str和被中newstr不一樣的東西 –

+0

啊。我爲變量和函數名稱使用了相同的名稱,當我改變它時,我忘了在該位置添加「_」。 – user994165

回答

2

你聲明的方式,newstr是一個函數,而new_str是一個char *。

您可能打算通過combine_string(new_str, "test");而不是如何擁有它。

我可能會建議在未來給你的變量和函數提供更多的描述性名字以避免這些事情!

編輯:如果你想使用一個調用的返回值newstr()combine_string() ARG 1,那麼你將不得不通過適當的參數中newstr()像這樣

new_str = combine_string(newstr(other_str, length_of_other_str), "test"); 
1

newstr是一個函數,顯然不是一個char *

new_str = newstr(item, strlen(item)); 
new_str = combine_string(newstr, "test"); 

你想:

new_str = combine_string(new_str, "test"); 

相關問題