gpt4 book ai didi

c - 在 C 函数中传递数组

转载 作者:行者123 更新时间:2023-11-30 20:12:26 25 4
gpt4 key购买 nike

我是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;
}

但是,如果我采用相同的代码并尝试将其放入函数中并将数组传递给该函数,则会收到总线错误(核心转储)。函数如下:

主函数中的函数调用:

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;
}

正确使用的句子示例:

This works properly.

even this works? Yes it does.

这会导致错误

Anything with a colon: causes error

最佳答案

这是我的猜测,它假设UPPERCASEA等于'A'(或其ASCII encoding等价)。

问题是,当您对几乎所有非实际字母的内容执行letter-UPPERCASEA时,您将得到一个负数索引,这将导致>未定义的行为

让我们以冒号':'为例。它的 ASCII 值为58'A' 的 ASCII 编码为 65。所以当你这样做时

array[letter-UPPERCASEA]++;

实际上和做是一样的

array[58-65]++;

等于

array[-7]++;

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

在你问之前,它似乎只是在main函数中工作。事实上,事实并非如此。

关于c - 在 C 函数中传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35476530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com