在C函数中传递数组

时间:2016-02-18 08:41:37

标签: c arrays function

我是c编程的初学者。我有一个程序来计算txt文件中的字母并将计数存储在一个数组中。当我在主函数中进行循环和计数时,一切正常

#define SIZE  26
#define UPPERCASEA  65
#define LOWERCASEA  97
#define SHIFTCASE   32 //difference between 'A'(int 65) and 'a'(int 97)    

int main() {
    int letter = 0;
    int letters[SIZE] = {0};

    printInstructions();

    // loopAndCountLetters(letters);

    letter = getchar();

    // get rest of characters until EOF
    while (letter != EOF) {     
        // if necessary change to uppercase
        letter = changeToUpperCase(letter);

        // increment proper letter in array
        letters[letter - UPPERCASEA]++;

        // get next letter
        letter = getchar();
    } // end of while

    printLetterArray(letters, SIZE);

    return 0;
}

但是,如果我使用相同的代码并尝试将其放入函数并将我的数组传递给该函数,我得到Bus Error (core dumped)。功能如下:

主函数中的函数调用:

loopAndCountLetters(letters);

功能定义:

void loopAndCountLetters(int array[]) {
    int letter = 0;

    letter = getchar();

    // get rest of characters until EOF
    while (letter != EOF) { 
        // if necessary change to uppercase
        if (letter >= LOWERCASEA) {
            // shift value to uppercase
            letter = letter - SHIFTCASE;
        }

        // increment letter in array
        array[letter - UPPERCASEA]++;

        letter = getchar();
    } //end of while

    return;
}

正常运作的句子示例:

  

这很正常。

     

即使这样有用吗?是的确如此。

这会导致错误

  

带冒号的任何内容:导致错误

1 个答案:

答案 0 :(得分:2)

这是我的 猜测 ,并假设'A'等于letter-UPPERCASEA(或其等效的ASCII encoding)。< / p>

问题是,当您对几乎所有非实际字母的':'执行操作时,您将获得否定索引,这将导致未定义的行为

让我们以冒号58为例。它的ASCII值为'A'65的ASCII编码为array[letter-UPPERCASEA]++; 。所以当你这样做时

array[58-65]++;

它实际上和做

一样
array[-7]++;

等于

main

您应该在数组中建立索引之前过滤掉任何非字母。

在您提出问题之前,似乎reloadData函数中工作。实际上它确实没有。