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

C-在函数之间传递数组会得到不同的值,c,arrays,pointers,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 = sear

因此,我试图编写一个函数,在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]);
}
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;
}
void main(){
炭块[L][L];
对于(int i=0;i
下面是search()函数:

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]);
}
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;
}
int*搜索(char(*bulk)[L],int大小,char*word){
int-arr[3]={0,0,0};
int flag=9;
对于(int i=0;i
checkRight()函数工作正常,如果单词右侧存在,则返回0/1。问题是两个printf打印的值不同

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

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

我假设它与指针有关,但我正在努力找到问题所在。有什么想法吗

非常感谢

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

尝试将arr作为参数传递,或使用“static int arr[3]”使数组不是临时的

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


尝试将arr作为参数传递或使用“static int arr[3]”使数组不是临时数组。

返回arr
-您将返回一个临时数组的地址,该临时数组在
搜索
函数返回后立即过期。取消引用该地址会调用未定义的行为。将
arr
作为in/out附加参数传递,或将其填充到
struct
中,该结构可以通过值返回。甚至a
static int-arr[3]可能是合适的。抵制诱惑,为这一切充满活力。谢谢!static int arr[3]对我有效,我想我忽略了它是临时的这一事实。
scanf_s
的函数调用缺少一个参数。您是否阅读了“与
scanf
wscanf
不同,
scanf\u s
wscanf\u s
要求为包含在[]中的c、c、s、s或字符串控制集的所有输入参数指定缓冲区大小?”。缓冲区大小(以字符为单位)作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。“请启用并修复所有编译器警告。”。最好是拒绝微软的非标准“安全”函数。你的编译器应该警告你的用户。不要忽视他们
&bulk
不是
char(*)[L]
@WhozCraig喜欢华丽的叶芝洗牌
return arr
-您正在返回一个临时文件的地址,该临时文件在
search
函数返回后立即过期。取消引用该地址会调用未定义的行为。将
arr
作为in/out附加参数传递,或将其填充到
struct
中,该结构可以通过值返回。甚至a
static int-arr[3]可能是合适的。抵制诱惑,为这一切充满活力。谢谢!static int arr[3]对我有效,我想我忽略了它是临时的这一事实。
scanf_s
的函数调用缺少一个参数。您是否阅读了“与
scanf
wscanf
不同,
scanf\u s
wscanf\u s
要求为包含在[]中的c、c、s、s或字符串控制集的所有输入参数指定缓冲区大小?”。缓冲区大小(以字符为单位)作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。“请启用并修复所有编译器警告。”。最好是拒绝微软的非标准“安全”函数。你的编译器应该警告你的用户。不要忽视他们
&bulk
不是
char(*)[L]
@WhozCraig喜欢华丽的叶芝洗牌!