C Ints и символы. Странное поведение - PullRequest
0 голосов
/ 12 января 2010

Я изучаю язык Си, и у меня возникла проблема, которую я, кажется, не могу решить самостоятельно. У меня есть простой цикл, в котором я складываю ascii значения всех символов в каждом слове.

    char char_array[100];
    int lexicographical_values[20];
    int i, j = 0;
    for( i = 0; i <strlen(char_array); i++) {
          if(char_array[i] == ' ') 
              j++;
          lexicographical_values[j] += (int)char_array[i];   
    }

Тогда, если я выведу массив lexicographic_values ​​в цикле

  printf("%d word is: %d \n", i, lexicographical_values[i]);

Я получаю правильные цифры для каждого слова (например: dd = 200 и т. Д.)

Но если я на самом деле смотрю на значение каждого элемента в массиве, я получаю большие числа, которые далеко не верны.

Вопрос в том, как получить правильные значения и как printf получает правильные значения?

Спасибо

Ответы [ 3 ]

4 голосов
/ 12 января 2010

Вы не инициализировали массив lexicographic_values. Вы можете инициализировать его, выполнив:

int lexicographical_values[20] = {};

Каждый раз, когда вы видите большие числа в выходных данных, проверяйте наличие неинициализированных переменных.

2 голосов
/ 12 января 2010

Вы начинаете с неинициализированной памяти.

man memset
0 голосов
/ 12 января 2010

Вы не инициализировали char_array ни с чем, поэтому, скорее всего, он содержит мусор (зависит от опций компилятора и платформ), поэтому вы делаете strlen(char_array), и на данный момент мы не уверены, что получим из этого. Если вы инициализируете его 0 (например: char char_array[100] = {0};, то strlen вернет 0, и вы никогда не войдете в цикл.

Может быть, вы ищете sizeof() здесь?

О, да, забыл упомянуть, что вам нужно инициализировать второй массив также, как уже было указано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...