void main c语言编程中下标值既不是数组也不是指针也不是向量

subscripted value is neither array nor pointer nor vector in the void main c language programming

我想在大数之间进行加法运算,但出现错误。我正在使用一个字符数组。第55行有错误。[错误]下标值既不是数组也不是指针也不是向量

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>


int chrtoint(char a){
    int i;
    for (i = 48; i<=57; i++)
    if (toascii(i)==a) return i-48;
    return 0;
}

void main(){
    char n1[80];
    char n2[80];

    
    printf("Enter First Number:");
    scanf("%s", &n1);
    printf("\nEnter Second Number:");
    scanf("%s", &n2);
    
    sumNumber(n1 , n2);


}

void sumNumber(char n1 , char n2){
    
    int rs[80];
    int c1, c2;

    int i,j,m, cmax, sum;
    c1 = strlen(n1);
    c2 = strlen(n2);

    strrev(n1);
    strrev(n2);
    
    cmax = c1;
    if(c1<c2){
        cmax = c2;
    }

    m=0;
    for(i=0; i< cmax; i++){
    if(c1==c2 || (i < c1 && i < c2)){
    sum = m+chrtoint(n1[i])+chrtoint(n2[i]); // error is given in this line
    }else if(i >=c1){
    sum = m+chrtoint(n2[i]);
    }else if(i >=c2){
    sum = m+chrtoint(n1[i]);
    }
    rs[i] = sum%10;
    m = sum/10;
    }
    
    if(m){
    rs[i]=m;
    i++;
    }

    printf("\nResult: ");
    for(j=0; j < i; j++){
        printf("%d", rs[i-j-1]);
    }
}

如果我问了同样的问题,我深表歉意。这是我第一次在此站点上发布问题。有什么不对的请告诉我。

您的编译器应该显示几条警告和错误消息。

首先,将原型添加到函数 void sumNumber(char n1, char n2) 或将其移到 main 上方。说到这一点,你的 main 函数原型不是很好的做法(在某些编译器中它是非法的);它应该是 int main(void)int main(int argc, char *argv[]).

这里:

void sumNumber(char n1, char n2)

这些变量在您的主函数中声明为字符数组,因此 sumNumber 的参数应该是字符数组:

void sumNumber(char n1[], char n2[])

或指向字符的指针:

void sumNumber(char *n1, char *n2)

还有一件事,在这些行中:

 scanf("%s", &n1);
 scanf("%s", &n2);

您传递的指针指向一个 80 个字符的数组,这是无效的;应该是

scanf("%s", n1);
scanf("%s", n2);

更正这些错误,您的程序应该 运行 没问题。

当我们定义 char 数组用作字符串时(我们不使用地址扫描它) 因为大多数编程语言中的 String 已经是 被视为地址(参考指针)

1-)我知道c里面没有String。 这就是为什么我说(当我们定义 char 数组“用作字符串”时)

2-) 根据 String 不是引用的观点。所有编程语言中的字符串都是非原始数据类型,这意味着它的变量可以被认为是一个对象。
正如我们所知,对象始终是一个引用