2016-04-03 63 views
-2

我運行這段代碼,出現以下錯誤,我做了一些研究,但是我沒有真正得到答案,我希望如果有人能夠給我一點幫助。如果我錯過了太明顯的東西,我是編程新手,請不必理會我。傳遞'fgets'的參數1使得整形指針沒有轉換

[警告]通過參數 '與fgets' 的1時將整數指針,未作鑄造

int main(int argc, char *argv[]) { 
char *t,*s; 
char first, second; 
int x; 

printf("Give the first string: "); 
fgets(first,sizeof(char),stdin); 
printf("Give the second string: "); 
fgets(second,sizeof(char),stdin); 
} 

當我添加一個 「&」 在我的 「第一」 和 「第二」它編譯的變量,但是當我運行它,我沒有得到我從鍵盤給出的字符串。

如何讓它編譯?

+0

'first'不是數組... –

+3

警告是有原因的 –

+0

你正在談論的sizeof( char)部分? – Dimitris

回答

0
int main(int argc, char *argv[]) { 
    char first[80], second[80]; 

    printf("Give the first string: "); 
    fgets(first, sizeof(char), stdin); 
    printf("Give the second string: "); 
    fgets(second, sizeof(char), stdin); 
} 

fgets的意思是「從文件中得到」,你需要一個字符數組保存的字符串。

1

fgets預計char*指向一個緩衝區,因爲它是第一個參數

+0

所以它期望一個指針? – Dimitris

+0

@Dimitris是的。一個指向有效內存位置的指針('malloc'ed內存段,一個自動字符數組) –

+0

@Dimitris是的,對於一個緩衝區,還要注意緩衝區也應該具有空終止字符的容量 - 所以什麼都不會被讀取放入大小爲1的緩衝區中。請參閱http://www.cplusplus.com/reference/cstdio/fgets/ – Vasfed

0

你應該把第一和第二進入指針和分配的空間,以填補他們在

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

int flen = 256; 
int slen = 256; 
char* first = malloc(flen); //allocate enough space to handle verbose typists :) 
char* second = malloc(slen); 
int x; 

printf("%s\n","Give the first string: "); 
fgets(first,flen,stdin); 

printf("%s\n","Give the second string: "); 
fgets(second,slen,stdin); 

//do something with first and second. 

//free memory you allocated 
free(first); 
free(second); 
}; 
相關問題