【问题标题】:Fatal Runtime Error - C Functions致命的运行时错误 - C 函数
【发布时间】:2015-07-26 08:10:30
【问题描述】:

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

#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 个单词,即“臭奶酪”。如果我注释掉 main 中的函数,那么程序会运行并一次输出 1 个字符
  • 这是什么语法:char array1[26]; = {'\0'}; ???它可以编译吗?

标签: c arrays fatal-error


【解决方案1】:

在表达式中

capitaliser(array1[26])

array[26] 将数组array1第27 个 元素传递给函数,并转换为指针。首先,你的索引超出了数组的范围,其次传递一个转换为指针的单个字符将不会传递一个有效的指针。

你想要例如

capitaliser(array1)

注意缺少索引。

【讨论】:

    【解决方案2】:

    你指的是一个你不应该的位置。 array1[26] 实际上并不存在。 int array1[length] 是一个大小为长度的数组,其索引从0 开始,以length-1 结束。

    您传递数组的方式不合适,这样您将只向函数发送一个值并且函数定义必须接收一个数组,这也会导致错误。

    发送数组的更好方法是&lt;functionName&gt;(array1),其中array1 是我的数组变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-05
      • 2017-12-30
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      相关资源
      最近更新 更多