我正在尝试创建一个大写数组中所有字符的函数。
#include <stdio.h>
#include <string.h>
void capitaliser(char inputText[])
{
int counter;
char upperLetter;
char lowerLetter;
for (counter = 0; counter < 26; counter++)
{
lowerLetter = 'a';
for (char upperLetter = 'A'; upperLetter <= 'Z'; upperLetter++)
{
if(inputText[counter] == lowerLetter)
inputText[counter] = upperLetter;
lowerLetter++;
}
}
}
int main( void )
{
int counter;
char array1[26]; = {'\0'};
char array2[26]; = {'\0'};
scanf("%s %s", array1, array2);
capitaliser(array1[26]);
capitaliser(array2[26]);
for ( counter = 0; counter < 26; counter++ )
{
printf("\n%c %c", array1[counter], array2[counter]);
}
}
当函数中的代码放在main中并且'inputText'被'array1'或'array2'替换时,程序运行正常并提供所需的输出。但是,当我尝试将代码作为函数运行时,我会遇到'致命运行时错误'。
由此我假设我正在设置错误的功能。我错过了一些非常明显的东西吗?
答案 0 :(得分:2)
在表达式
中capitaliser(array1[26])
array[26]
将数组array1
的第27个元素传递给函数,转换为指针。首先,你的索引超出了数组的范围,其次传递转换为指针的单个字符不会传递有效的指针。
你想要例如。
capitaliser(array1)
请注意缺少索引。
答案 1 :(得分:0)
你指的是你不应该的位置。
array1[26]
实际上不存在。 int array1[length]
是一个大小为length的数组,其索引从0
开始,以length-1
结尾。
传递数组的方式是不合适的,这样你只会向函数发送一个值,并且函数定义被绑定接收数组,这也会导致错误。
发送数组的更好方法是<functionName>(array1)
,其中array1是我的数组变量。