C - 在函数之间传递数组会得到不同的值

时间:2017-03-30 19:04:00

标签: c arrays pointers

所以我正在尝试编写一个能够在2D批量搜索单词的函数。 该函数返回一个大小为[3]的(int)数组,其值为答案。 这是我的main()函数:

void main() {
    char bulk[L][L];
    for (int i = 0; i < L; i++) {
        for (int j = 0;j < L;j++)
            scanf_s(" %c", &bulk[i][j]);
    }
    int *arr = search(&bulk, L, "bc");
    printf("ARR: %d, %d, %d\n", arr[0], arr[1], arr[2]);
}

这是search()函数:

int *search(char(*bulk)[L], int size, char *word) {
    int arr[3] = { 0,0,0 };
    int flag = 9;
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            if (bulk[i][j] == *word) {
                if (checkRight(bulk, i, j, word)) flag=0;
            }
            if (flag != 9) {
                arr[0] = i;
                arr[1] = j;
                arr[2] = flag;
                printf("ARR: %d, %d, %d\n", arr[0], arr[1], arr[2]);
                return arr;
            }
        }
    }
    return arr;
}

checkRight()函数运行良好,如果单词存在于右侧,则返回0/1。问题是两个 printf 正在打印不同的值。

搜索输出():“ARR:0,1,0”。

main()的输出:“ARR:-858993460,-858993460,0”。

我认为它与指针有关但我正在努力寻找问题。有什么想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

return arr;

在这里,您将返回数组中第一个值的地址,该地址指向函数搜索的堆栈帧内的临时值。

尝试将arr作为参数传递或使用&#34; static int arr [3]&#34;为了使数组不是临时的。