C程序在执行时崩溃

时间:2015-11-10 22:55:04

标签: c

我正在尝试学习C但今天编译程序时它会在执行时崩溃。

我希望我的程序输入三个字符串,将这些字符串的每个字母与索引编号匹配,将这些数字相互添加,然后输出这些数字。

#include <stdio.h>
#include <stdlib.h>

void main()
{
   int i, j;

   int c = 0; 
   int e = 0; 
   int d = 0;

   char wrd1[4];
   char wrd2[4];
   char wrd3[4];

   char az[] = "abcdefghijklmnopqrstuvwxyz";

   printf("Enter The words ");

   printf("\n");

   scanf("%s", &wrd1);

   printf("\n");

   scanf("%s", &wrd2);

   printf("\n");

   scanf("%s", &wrd3);

   int n = sizeof(wrd1) / sizeof(char);

   int m = sizeof(wrd2) / sizeof(char);

   int o = sizeof(wrd3) / sizeof(char);

   for (i = 0; i <= 25; i++)
   {
      for (j = 0; j <= n; j++)
      {
         if (az[i] = wrd1[j])
         {
            c = c + i;
         }
      }
   }

   for (i = 0; i <= 25; i++)
   {
      for (j = 0; j <= m; j++)
      {
         if (az[i] = wrd2[j])
         {
            d = d + i;
         }
      }
   }

   for (i = 0; i <= 25; i++)
   {
      for (j = 0; j <= o; j++)
      {
         if (az[i] = wrd3[j])
         {
            e = e + i;
         }
      }
   }

   printf(c);
   printf(d);
   printf(e);

}

2 个答案:

答案 0 :(得分:3)

您的代码可能存在多个问题,但至少您在此处遇到问题(在多个位置)

for (j = 0; j <= n; j++)

因为<=你允许函数读取超出这里的数组边界(在你的循环中)

if (az[i] = wrd3[j])

读取数组边界的数组元素是未定义的行为,可能是崩溃的原因(尽管您的代码也可能有其他错误)。

将循环更改为

for (j = 0; j < n; j++)
               ^
               ^

确保您不会超越数组边界。

最后,在行

if (az[i] = wrd3[j])    

您可能打算使用==作为您目前的作业,比较。这不会导致崩溃,但除非您 尝试分配给az[i],否则这是一个错误。

答案 1 :(得分:2)

要打印c的值,您不应使用printf(c);,而应使用printf("%d\n", c);