使用C中的数组[100]运行时错误

Qui*_*irk 1 c arrays initialization char switch-statement

我是C的初学者.我当时试图在Code :: Blocks和Ideone中运行这段代码,两者都给了我相同的运行时错误.我试图改变arr[100]arr[101]和令人惊讶的是,该代码运行.我也担心初始化poo[t],因为它似乎没有存储sum它的价值.或者也许sum保留了价值0(可能是switch声明不允许char案件吗?)

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

int main()
{
   int arr[100], t, poo[t], i, j, sum; // refer HOLES

   scanf("%d", &t);

   for (i=0; i<t; i++) {
        scanf("%s", arr);
        j=0;
        sum = 0;
        while (arr[j] != '\0') {
            switch (arr[j])
            {
            case 'B':
                sum = sum + 2;
                break;
            case 'A':
            case 'D':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
                sum++;
                break;
            default:
                break;
            }
            j++;
        }
        poo[i] = sum;
        printf("%d", poo[i]);
   }

   for (i=0; i<t; i++)
   {
        printf("%d \n", poo[i]);
   }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Lih*_*ihO 5

int arr[100];
scanf("%s", arr);
Run Code Online (Sandbox Code Playgroud)

如果arr是一个字符串,它应该声明为char数组:

char arr[100];
scanf("%s", arr);
Run Code Online (Sandbox Code Playgroud)

"我也担心初始化poo[t]"

你应该.以下声明:

int t, poo[t];
scanf("%d", &t);
Run Code Online (Sandbox Code Playgroud)

使用unitialized变量t调用未定义的行为.

poot正确初始化后声明:

int t = 0;
scanf("%d", &t);
int poo[t];
Run Code Online (Sandbox Code Playgroud)