none
请看这一段c程序代码,错误在哪里?? RRS feed

  • 问题


  • include <stdlib.h>
    #include <string.h>
    void main()
    {
     char str1[20],str2[20],str3[40];
     int i,m,n;
     printf("请输入字符串一\n");
     gets(str1);
     printf("请输入字符串二\n");
     gets(str2);
     m=strlen(str1);
     n=strlen(str2);
     printf("字符串的长度分别是%d\n%d",m,n);
     for(i=0;i<m;i++)
      str3[i]=str1[i];
     for(i=0;i<n;i++)
      str3[i+m]=str2[i];
     printf("%s\n",str3[40]);
     system("pause");
     
    }
    编译正常,。运行错误如下:
    SYfive1.exe 中的 0x1029984f 处未处理的异常: 0xC0000005: 读取位置 0xffffffcc 时发生访问冲突

     

    希望高手指出我编程中的错误,谢谢

    2009年10月13日 7:24

答案

  • #include<stdio.h>
    #include <string.h>
    void main()
    {
     char str1[20],str2[20],str3[40];
     int i,m,n;
     printf("请输入字符串一\n");
     gets(str1);
     printf("请输入字符串二\n");
     gets(str2);
     m=strlen(str1);
     n=strlen(str2);
     printf("字符串的长度分别是%d\n%d",m,n);
     for(i=0;i<m;i++)
      str3[i]=str1[i];
     for(i=0;i<=n;i++)
      str3[i+m]=str2[i];
     printf("%s\n",str3);

     
    }
    你写的有点问这样就正常了
    vc 6.0下运行的
    你的错误主要是:printf("%s\n",str3[40]);还有就是给最后一个字符的后面没有加上'\0'。
    要问你那个为什么错有那样的错误,原因为你要访问str3[40],这个地址不属于str3[40]这个数组中。这个地址符可能是系统正有用的或其他和序的,系统不允许访问,一句访问数组越界了。

    2009年10月16日 8:36

全部回复

  • 访问越界。用调试器单步执行,观察每个语句执行时各个变量的值。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年10月13日 18:00
    版主
  • 听不懂。。能再讲清楚一点吗?谢谢
    我写的程序是
    不用strcat函数把两个字符串连接在一起



    2009年10月14日 1:38
  • 代码单步执行概述

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年10月14日 1:57
    版主
  • gets(str1);
    gets(str2);
    这两句输入的字符超过了19的长度。并且没有对str3最后添加字符串结束符\0

    麻烦把正确答案设为解答。
    2009年10月15日 0:43
    版主
  • #include<stdio.h>
    #include <string.h>
    void main()
    {
     char str1[20],str2[20],str3[40];
     int i,m,n;
     printf("请输入字符串一\n");
     gets(str1);
     printf("请输入字符串二\n");
     gets(str2);
     m=strlen(str1);
     n=strlen(str2);
     printf("字符串的长度分别是%d\n%d",m,n);
     for(i=0;i<m;i++)
      str3[i]=str1[i];
     for(i=0;i<=n;i++)
      str3[i+m]=str2[i];
     printf("%s\n",str3);

     
    }
    你写的有点问这样就正常了
    vc 6.0下运行的
    你的错误主要是:printf("%s\n",str3[40]);还有就是给最后一个字符的后面没有加上'\0'。
    要问你那个为什么错有那样的错误,原因为你要访问str3[40],这个地址不属于str3[40]这个数组中。这个地址符可能是系统正有用的或其他和序的,系统不允许访问,一句访问数组越界了。

    2009年10月16日 8:36