当我尝试向函数发送数组时,我收到错误。
这是我的minunit测试计划:
#include "minunit.h"
#include "calc.h"
#include <stdio.h>
int tests_run = 0;
static char * test_Repetitve() {
mu_assert("error in test_Repetitive, Repetitive != 7", HistogramArray({1,2,3,4,5,6,7})== 7);
return 0;
}
static char * all_tests() {
mu_run_test(test_Repetitive);
return 0;
}
int main(int argc, char **argv) {
char *result = all_tests();
if (result != 0) {
printf("%s\n", result);
}
else {
printf("ALL TESTS PASSED\n");
}
printf("Tests run: %d\n", tests_run);
return result != 0;
}
我遇到的问题是
mu_assert("error in test_Repetitive, Repetitive != 7", HistogramArray({1,2,3,4,5,6,7})== 7);
它进入这个功能:
int HistogramArray(int one[])
{
int arrchk[TWENTY+ONE] = { ZERO }, i, j,counter=0;//arrchk is an array that counts how many times the number appears.
for (i = ZERO; i<N; i++)
arrchk[one[i]]++;
for (i = ZERO; i<TWENTY+ONE; i++)
{
if (arrchk[i] != ZERO)
{
printf("the number is %d ", i);//printing the histogram.
counter++;
}
for (j = ZERO; j<arrchk[i]; j++)
{
printf("*");
}
if (arrchk[i] != ZERO)printf("\n");
}
return counter;
我基本上需要检查直方图函数中的计数器是否为7,有什么建议吗?
答案 0 :(得分:5)
问题在于语法HistogramArray({1,2,3,4,5,6,7})
,这里{1,2,3,4,5,6,7}
不是它自己的数组,它是一个支持初始化的初始化列表。 HistogramArray()
函数需要一个数组作为参数。
但是,您可以使用语法 compound literal
HistogramArray((int []){1,2,3,4,5,6,7})
像数组一样使用它。
引用C11
,章节§6.5.2.5,
后缀表达式,由带括号的类型名称后跟括号括起来组成 初始化列表是复合文字。它提供了一个未命名的对象,其值由初始化列表给出。
和
如果类型名称指定了未知大小的数组,则大小由 6.7.9中指定的初始化列表,复合文字的类型是 完成的数组类型。 [...]
因此,这为您提供了一个未命名的数组,该数组使用括号括起的列表中的元素进行初始化。