致命运行时错误 - C函数

时间:2015-05-14 16:03:11

标签: c arrays fatal-error

我正在尝试创建一个大写数组中所有字符的函数。

#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'替换时,程序运行正常并提供所需的输出。但是,当我尝试将代码作为函数运行时,我会遇到'致命运行时错误'。

由此我假设我正在设置错误的功能。我错过了一些非常明显的东西吗?

2 个答案:

答案 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是我的数组变量。