标题:C程序找错,急啊
只看楼主
雪天
Rank: 1
等 级:新手上路
帖 子:18
专家分:5
注 册:2009-7-23
结帖率:40%
已结贴  问题点数:20 回复次数:4 
C程序找错,急啊
设计InsertData(char *s,T n,int start=1),将数据n(可以是数值型数据或字符
     串)插入到字符串s的位置start处(位置编号从1开始计数)。

#include"stdio.h"
void InsertData(char *s,int n,int start);
void main()
{
    char s[]="i love you";
    int start=3,n;
    printf("enter n:");
    scanf("%d",&n);
    InsertData(s,n,start);
}
void InsertData(char *s,int n,int start)
{
    char *p,*p1,*p2,s1[100],s2[100];
    int i,i1,j,m[100],flag;
    i=0;
    do
    {
        m[i++]=n%10;
        n/=10;
    }while(n!=0);
    i1=i-1;
    for(j=0;j<=i-1;j++)
        s1[j]=(char)m[i1--]+48;
    s1[j]='\0';
    p1=s1;
    p2=s2;
    p=s;
    flag=1;
    while(flag<start)
    {
        flag++;
        p++;
    }
    while(*p!='\0')
        *(p2++)=*(p++);
    *p2='\0';
    p=s;
    flag=1;
    while(flag<start)
    {
        flag++;
        p++;
    }
    while(*p1!='\0')
        *(p++)=*(p1++);
    p2=s2;
    while(*p2!='\0')
        *(p++)=*(p2++);
    *p='\0';
    printf("%s",s);
}

运行错误:
http://wenwen.
搜索更多相关主题的帖子: void 数据 include 字符串 start 
2009-08-03 00:06
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
得分:5 
程序代码:
/* 设计InsertData(char *s,T n,int start=1),将数据n(可以是数值型数据或字符
     串)插入到字符串s的位置start处(位置编号从1开始计数)。

 */
#include "stdio.h"
void InsertData(char *s, char *p,int start)
{ static char a[20],*t;
   t=a;
   while(t<a+start-1)
   *t++=*s++;
   while(*p)
   *t++=*p++;
   while(*s)
   *t++=*s++;
   *t='\0';
   printf("%s",a);
    
    
}
void main()
{
    char s[]="i love you",p[10];
    int start=3;;
    printf("enter n:");
    gets(p);
    InsertData(s,p,start);
    
}


前两天写过类似的,你看符合不符合你要求。
你源程序定义的n为int,怎么能插入字符串呢?

唯有天道恒在,往复循环,不曾更改。。。
2009-08-03 01:07
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:5 
char s[]="i love you";
定义时系统给s分配的空间是11 Byte(含一个'\0'),即按实际需要分配。
你在用p时是在对分配给s的空间进行读写,插入时必然超出s的有效范围,也就是说你对系统未分配给你的内存空间进行了违规操作!
错误是这样,但是当我在VC++6.0中运行时输入一到两位数时没有错误,还需询问高手。

[[it] 本帖最后由 CrystalFan 于 2009-8-3 19:31 编辑 [/it]]
2009-08-03 19:30
guoweiyan
Rank: 2
等 级:论坛游民
帖 子:7
专家分:10
注 册:2009-8-3
得分:5 
char *insert(char s[20],char *s1,int i)
{
    char *p,*q;
    int j=strlen(s1);
    p=s+strlen(s);
    q=p+strlen(s1);
    *q='\0';
    for(p--,q--;p>=s+i-1;)
        *(q--)=*(p--);
    for(p=s+i-1;j--;)
        *(p++)=*(s1++);
        return s;
    
}
void main()
{
     char s[20]="student";
     char *s1="teacher";
     int i=4;
     //insert(s,s1,i);
     printf("%s\n",insert(s,s1,i));
}
看看是不是你想要的,
2009-08-04 09:20
wdeast
Rank: 2
等 级:论坛游民
帖 子:14
专家分:74
注 册:2009-7-13
得分:5 
数据区溢出,
C语言不强制检查下标越界,
所以你的程序编译应该没问题,
但运行有问题。
如果用TC 2.0编译,并在WINDOWS的CMD操作台下运行,操作系统会警告。
如果用VC编译,你注意一下编译的提示。
2楼和4楼的程序都能用,不过操作的字符串不能太长。
2009-08-04 16:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-281381-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.401836 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved