我有以下代码:
#include <stdio.h>
#include <stdlib.h>
int compare(const void* a, const void* b)
{
const int* x = a, *y = b;
if (*x < *y)
return -1;
else if (*x == *y)
return 0;
else
return 1;
}
int main()
{
size_t n;
printf("Enter number of numbers: ");
scanf("%zu", &n); //<-- warnings here
int numbers[n];
for (size_t i = 0; i < n; i++)
{
printf("Enter number #%zu: ", i + 1); //NO warning here, printf works as expected
scanf("%d", &numbers[i]);
}
qsort(numbers, n, sizeof *numbers, compare);
for (size_t i = 0; i < n; i++)
printf("%d ", numbers[i]);
printf("\n");
system("pause"); //don't comment for this, I know it's bad
}
我从我的GCC编译器收到2条警告:
warning: unknown conversion type character 'z' in format [-Wformat=]
warning: too many arguments for format [-Wformat-extra-args]
我已将GCC设置为C11。谁能帮助我了解我为什么得到这个?
编辑:我忘了提到我的代码,即使有那些警告,仍然可以正常工作,但是对我来说,这很奇怪,似乎变量n不能从scanf获取其值
但是我不知道如何检查我的编译器版本