马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
//不使用mallo申请内存空间而使用realloc申请,
//让用户输入一个整数,每输入一个数,增加一个整型空间存放,
//直到输入“-1”表示输入结束,打印之前输入的所有数。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i, num;
int count = 0;
int* ptr = NULL;
do
{
printf("请输入一个整数(输入-1表示结束):", &num);
scanf("%d", &num);
count++;
ptr = (int*)realloc(ptr, count * sizeof(int));
//如果ptr参数为NULL,那么调用realloc函数相当于调用malloc(size)
if (ptr == NULL)
{
exit(1);
}
ptr[count - 1] = num;
}while(num != -1);
printf("输入的整数分别是:");
for (i = 0; i < count; i++)
{
printf("%d ", ptr[i]);
}
putchar('\n');
free(ptr);
return 0;
}
请问这两个报错什么意思,什么是可变参数,怎样就是0个1个,以及怎样通过修改代码高效解决问题
这个警告信息告诉你,你的 printf 语句提供的参数比格式字符串所需的多。这是因为你的格式字符串("请输入一个整数(输入-1表示结束):")没有包含任何占位符(例如 %d 或 %s),但你却在函数调用中提供了一个额外的参数 &num 。
在C语言中,printf函数可以接受可变数量的参数。这意味着,除了必须的格式字符串参数之外,printf还可以接受0个、1个或多个额外参数,这些额外的参数通常用于替换格式字符串中的占位符。
但是,在你的代码中,printf语句 "请输入一个整数(输入-1表示结束):" 后面跟着的 &num 参数是没有必要的,因为格式字符串中并没有占位符需要被替换。因此,你应该移除该参数以消除这个警告。
修复这个问题后的代码应该是这样的:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i, num;
int count = 0;
int* ptr = NULL;
do
{
printf("请输入一个整数(输入-1表示结束):");
scanf("%d", &num);
count++;
ptr = (int*)realloc(ptr, count * sizeof(int));
//如果ptr参数为NULL,那么调用realloc函数相当于调用malloc(size)
if (ptr == NULL)
{
exit(1);
}
ptr[count - 1] = num;
}while(num != -1);
printf("输入的整数分别是:");
for (i = 0; i < count; i++)
{
printf("%d ", ptr[i]);
}
putchar('\n');
free(ptr);
return 0;
}
这段代码中删除了第一个 printf 语句的额外参数 &num 。现在, printf 语句只有一个参数,也就是它的格式字符串,这与其所需的参数数量一致,不会引发警告。
|