我借助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;
}
我很感激能让我继续前行。
答案 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";)