Почему происходит это?

Я реализовал этот код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char current[256];
int main(int argc, char *argv[])
{
    char line[500];
    int i=0;
    char chr;
    while (fgets(line, sizeof(line), stdin)!=NULL)
    {
        for(i=0; i<sizeof(line)-1; i++)
            if(isdigit(line[i]))
            {
                chr=(char)line[i];
                current[(int)chr]++;
            }
        for(i=0; i<256; i++)
            if(current[i]!=0)

        printf("Number:%c Times:%d \n \n",i ,current [i]);

    }

}

Таким образом он заставляет то, что он должен, рассказывать числа и показывать число раз, которые повторяются, также как и число, которое. Но когда я добавляю char current[256]; внутри функции main программа делает что-то полностью различным.

Почему это это?

1
задан 23.01.2017, 11:55
0 ответов

Если arrays высказываются как глобальные или внутри функции как статические:

char current[256]; // Variable global

int main()
{
  static char current[256]; // variable local estática
}

Осуществляется inizalización того же самого, в этом случае seteando вся стоимость в 0.

Взамен, если array высказывается внутри функции:

int main()
{
  char current[256];
}

Тогда только размещается память, необходимая для выражения array и инициализация прокручивает изображение в окне твоего счета. Конечно же ты можешь вынуждать вышеупомянутую инициализацию, но должен делать это ясно:

int main()
{
  char current[256] = {0};
}

Как добавочный комментарий, ввиду того, что ты используешь current чтобы считать ты был бы должен ставить использовать тип int:

int current[256] = {0};

Кроме того, что может считать более 255 появлений (что я не думаю, что этот предел будет вызывать у тебя проблему), тип int он натуральнее для числовых операций, в то время как char более подумался для управления символов... вопрос семантики.

2
ответ дан 03.12.2019, 17:32