关于#数组#的问题,如何解决?

定义了一个数组A[100],未赋初值,在函数中调用数组A,并多次使用该函数,发现A被覆盖(由于第一次使用给A 赋值的长度大于第二次,所以第二次赋值结果错误),但在主函数中直接使用A,并赋值,无误

错误代码:

#include<stdio.h>
#include<string.h>
void swap(char a[],char A[]){
    int len=strlen(a);
    int j=0;
    for(int i=0;i<len;i++){
        if(a[i]>='0'&&a[i]<='9'){ 
            A[j]=a[i];
            j++;
        }
        A[j]='\0';
    }
}
int main(void){
    char a[100],b[100]
    while(scanf("%s%s",a,b)!=EOF){
    char A[100],B[100];
    int n1,n2;
    swap(a,A);
    swap(b,B);
    sscanf(A,"%d",&n1);
    sscanf(B,"%d",&n2);
    if(a[0]=='-'){
        n1=-n1;
    }
    if(b[0]=='-'){
        n2=-n2;
    }
    printf("%d",n1+n2);
    }
    return 0;
} 









###### 正确代码

```c++
#include<stdio.h>
#include<string.h>

int main() {
    char a[20], b[20], A[20], B[20];
    int n1, n2;
    while (scanf("%s %s", a, b) != EOF) {
        int a_len = strlen(a);
        int j = 0;
        for (int i = 0; i < a_len; i++) {
            if (a[i] >= '0' && a[i] <= '9') {
                A[j] = a[i];
                j++;
            }
        }
        A[j] = '\0';
        sscanf(A, "%d", &n1);
        if (a[0] == '-') { n1 = -n1; }
        int b_len = strlen(b);
        int k = 0;
        for (int i = 0; i < b_len; i++) {
            if (b[i] >= '0' && b[i] <= '9') {
                B[k] = b[i];
                k++;
            }
        }
        B[k] = '\0';
        sscanf(B, "%d", &n2);
        if (b[0] == '-') { n2 = -n2; };
        printf("%d\n", n1 + n2);
    }
    return 0;
}


######想知道为什么第二种可行,数组值不会改变吗

第二种代码是正确的,因为它在函数内部声明了局部变量A和B,这两个变量的作用域只在函数内部。因此,每次调用函数时,A和B的值都会重新被赋值,而不会影响主函数中的A和B。


在第一种代码中,你将A和B作为函数的参数传入,这意味着它们是引用传递。在函数内部,你对A和B进行了赋值操作,这将会改变它们的值。因此,当你在调用函数时,A和B的值可能会被改变,这可能会导致程序出现错误。

你把错误代码里的错误结果的示例贴上来看看。