2010-11-22 47 views
3

我已經在k & r書的幫助下學習了c。非常令人興奮,但我很早就遇到了麻煩,我不知道如何解決問題。簡單的c錯誤使得整型指針不會拋出

我正在嘗試一些非常簡單的示例代碼,並且出現以下錯誤。我不明白爲什麼,因爲代碼是直接出書的。

main.c:11: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast 


#include <stdio.h> 

/* copy input to output; 1st version */ 
main() { 
    int i; 
    int power(int base, int n); 

    for (i = 0; i < 10; i++) { 
     sprintf("%d %d %d\n", i ,power(2, i), power(-3, i)); 
     return 0; 
    } 



} 

int power(int base, int n) { 
    int i; 
    int p; 

    p = 1; 

    for (i = 1; i <= n; ++i) 
     p = p * base; 
    return p; 

} 

我會很感激,讓我繼續我的方式再次。

+2

爲什麼``for`循環裏面有`return`? – 2010-11-22 20:10:30

+0

該書的代碼完全按照「原樣」提供。回報是一個問題嗎? – dubbeat 2010-11-22 20:12:37

回答

5

sprintf用於根據某些格式創建字符串。它看起來像你想要的輸出,所以你想要使用printf

此外,return 0;不應被包含在您的for循環中。這會導致程序在一次迭代後終止。

3

man sprintf: int sprintf(char * str,const char * format,...);

sprintf的第一個參數是您分配的字符串。

如果要打印到標準輸出(通常是運行程序的終端),請改爲使用printf

0

sprintf()需要一個字符串作爲第一個和第二個參數。

第一個指定要存儲結果的字符串,第二個指定格式字符串。您可能需要使用printf()而不是sprintf()

0

sprintf()的第一個參數是您應該打印到的緩衝區。第二個是格式字符串。

(還要考慮使用snprintf() - 這是更容易編寫安全的代碼,不溢出緩衝區。)

0

這只是一個編譯器警告,但這個過程應該,如果你已經成功地完成了沒有得到任何錯誤信息...... 你可以得到周圍的警告通過添加一個顯式的第11行.. 檢查"type casting c"對谷歌;)

1

爲大家誰不知道abouwt環路與回報 有不同之處:

for (i = 1; i <= n; ++i) 
    p = p * base; //inside 
return p;   //outside because no brackets {} 

和:

for (i = 1; i <= n; ++i){ 
    p = p * base; //inside 
    return p;}  //inside because brackets {} 

如果你沒有在循環或語句中使用括號,只有直接的下一行會被執行。這個回報在循環之外

相關問題