C程序在执行时崩溃

C程序在执行时崩溃,c,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]; cha

我试图学习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);

}
#包括
#包括
void main()
{
int i,j;
int c=0;
int e=0;
int d=0;
char-wrd1[4];
char-wrd2[4];
charwrd3[4];
char az[]=“abcdefghijklmnopqrstuvwxyz”;
printf(“输入文字”);
printf(“\n”);
扫描频率(“%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);

对于(i=0;i您的代码可能有多个问题,但至少您在这里有一个问题(在多个位置)

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

将循环更改为

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

您可能打算使用
==
,因为您当前拥有的是分配,而不是比较。这不会导致崩溃,但是一个错误,除非您正在尝试分配给
az[i]

您的代码可能有多个问题,但至少您在这里有一个问题(在多个位置)

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

将循环更改为

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


您可能打算使用
==
,因为您当前拥有的是赋值,而不是比较。这不会导致崩溃,但是一个错误,除非您正在尝试分配给
az[i]

来打印
c
的值,您不应该使用
printf(c);
,而是类似
printf的东西(“%d\n”,c);
要打印
c
的值,不应使用
printf(c);
,而应使用类似
printf(“%d\n”,c)的内容

您是在打开警告的情况下编译的吗?这会暴露出很多错误。与其在此处转储整个程序,不如将程序简化为仍然崩溃的最简单代码,然后将其作为您的问题。不测试scanf的返回值肯定会让您感到意外!您的问题是什么?此处的代码问题应该包括e最小复制程序—删除了复制问题不一定需要的所有代码。请参阅是否在打开警告的情况下编译?这将揭示许多错误。与其在此处转储整个程序,不如将程序简化为仍然崩溃的最简单代码,然后将其作为您的问题。不要测试scanf的返回值这肯定会带来惊喜!你的问题是什么?这里的代码问题应该包括最小的复制器——删除复制问题不一定需要的所有代码。请参阅和mn,和o根据定义将始终为4。我像你说的那样修改了代码,但visual studio给了我这个“在ConsoleApplication7.exe中的0x0FC44B2A(ucrtbased.dll)处引发异常:0xC0000005:访问冲突读取位置0x00000659。"@Med您是否也像另一个答案所建议的那样更改了
printf
调用?是的,我这样做了??????!@Med,您从控制台输入哪些字符串读取到数组中?它们是否超过3个字符长?并且
m
n
o
根据定义将始终为4。我修改了我的代码,如您说过,但visual studio给了我这个“在ConsoleApplication7.exe中的0x0FC44B2A(ucrtbased.dll)引发的异常:0xC0000005:访问冲突读取位置0x00000659。”@Med您是否也像其他答案所建议的那样更改了
printf
调用?是的,我这样做了??????!@Med以及您从控制台输入的哪些字符串被读取到数组中?它们是否超过3个字符长?
for (j = 0; j < n; j++)
               ^
               ^
if (az[i] = wrd3[j])