Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标量初始值设定项中的元素过多,C中出现错误_C - Fatal编程技术网

标量初始值设定项中的元素过多,C中出现错误

标量初始值设定项中的元素过多,C中出现错误,c,C,我正试图编写一个程序来获取数组中的多数元素。然而,我得到了这个奇怪的错误。我的代码是: #include <stdio.h> int find_majority_element(arr) { int length = sizeof(arr); return length; } int main() { int input = { 12, 3, 2, 1, 2, 4, 2, 2, 9, 2, 2, 1, 2 }; printf(find_majori

我正试图编写一个程序来获取数组中的多数元素。然而,我得到了这个奇怪的错误。我的代码是:

#include <stdio.h>

int find_majority_element(arr) {
    int length = sizeof(arr);
    return length;
}

int main()
{
    int input = { 12, 3, 2, 1, 2, 4, 2, 2, 9, 2, 2, 1, 2 };
    printf(find_majority_element(input));
}

为什么我总是犯这个错误?现在,我所做的就是获取和打印长度。没别的了。我尝试了另一个编译器,它说有一个分段错误,不管这意味着什么。

这并不奇怪。这是意料之中的
int x={2}
当在初始化中用于
=
的RHS中时,除此之外的任何内容都是有效的
{}
-这是未定义的行为。在这里,您尝试使用多个值初始化
int
变量

什么能纠正它
intx[]={1,2,3,4}
yes这是正确的-初始化具有4个元素的数组

还有什么?将数组传递给函数时,它将转换为指向第一个元素的指针。将
sizeof
应用于它不会给出数组的长度

还有更多。在
main()
中,即使您执行了在其他函数中执行的操作,它仍然是错误的

printf("Length of array is %zu\n",sizeof(x)/sizeof x[0]);
这将为您提供数组的长度。这是得到它的正确方法。(有一种情况下,
sizeof(x)
将正确返回数组的长度-即当
x
char
array时)

代码如下所示:-

#include <stdio.h>

int find_majority_element(size_t len, int* arr) {
    ...    
    return someIntVar;
}

int main(void)
{
    int input[] = { 12, 3, 2, 1, 2, 4, 2, 2, 9, 2, 2, 1, 2 };
    size_t len = sizeof(input)/sizeof(input[0]);
    printf("%d\n", find_majority_element(len, input));
    return 0;
}

这几乎已经过时了

你试过另一个编译器?所以,如果你有错误,你会认为编译器是错误的,而不是你的代码??我想这一定是编译器的错误。请使用一些标准引号?@user202729.:关于未定义错误部分的标准引号?为什么它甚至是有效语法@user202729.:已编辑。。。。好吧,不知何故,我忘记了,不严格符合规范的程序可能能够编译。错误的程序也是如此。很抱歉
#include <stdio.h>

int find_majority_element(size_t len, int* arr) {
    ...    
    return someIntVar;
}

int main(void)
{
    int input[] = { 12, 3, 2, 1, 2, 4, 2, 2, 9, 2, 2, 1, 2 };
    size_t len = sizeof(input)/sizeof(input[0]);
    printf("%d\n", find_majority_element(len, input));
    return 0;
}
int find_majority_element(arr) 
int *arr;
{
    int length = sizeof(arr);
    return length;
}