简单的c错误使得指针来自整数而没有强制转换

时间:2010-11-22 20:08:08

标签: c pointers

我借助k& K进行了学习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;

}

我很感激能让我继续前行。

6 个答案:

答案 0 :(得分:5)

sprintf用于根据某些格式创建字符串。看起来你想要输出,所以你想使用printf

此外,不应将return 0;括在for循环中。一次迭代后,它将导致程序终止。

答案 1 :(得分:3)

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

sprintf的第一个参数是你分配的字符串。

如果要打印到标准输出(通常是运行程序的终端),请改用printf

答案 2 :(得分:1)

对于每个不知道循环返回的人 以下之间存在差异:

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 {}

如果你不在循环或if语句中使用括号,则只会执行直接的下一行。这个回报在循环之外

答案 3 :(得分:0)

sprintf()期望一个字符串作为第一和第二个参数。

第一个指定要存储结果的字符串,第二个指定格式字符串。

您可能希望使用printf()代替sprintf()

答案 4 :(得分:0)

sprintf()的第一个参数是您应该打印到的缓冲区。第二个是格式字符串。

(另外考虑使用snprintf() - 编写不会超出缓冲区的安全代码要容易得多。)

答案 5 :(得分:0)

这只是一个编译器警告,但如果您没有收到任何错误消息,该过程应该已成功完成... 您可以通过向第11行添加显式强制转换来绕过警告。 在google上查看"type casting c";)