C语言问题,编译没错运行出错:用指针实现在字符串a中指定位置处插入字符串b。

#include "stdafx.h"
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include <malloc.h>

void main(void)
{ int i=1,j=1,n,k,l,m;
char *a,*b;
a=(char *)malloc(100);
b=(char *)malloc(100);
printf("input str a:\n");
scanf("%c",(a+i));
while(*(a+i)!='\n')
{
l=i;
i++;
scanf("%c",(a+i));

}
printf("input str b:\n");
scanf("%c",(a+j));
while(*(a+j)!='\n')
{
m=j;
j++;
scanf("%c",(a+j));
}
printf("input n:\n");
scanf("%c",&n);
for(k=l+m;k>n+m;k--)
*(a+k)=*(a+k-m);
for(k=n,i=0;k<n+m+1;k++,i++)
*(a+k)=*(b+i);
for(i=1;i<l+m+1;i++)
printf("%c",*(a+i));
getch();
}
#include "stdafx.h"
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include <malloc.h>

void main(void)
{ int i=1,j=1,n,k,l,m;
char *a,*b;

a=(char *)malloc(100);
b=(char *)malloc(100);

printf("input str a:\n");
scanf("%c",(a+i));
while(*(a+i)!='\n')
{
l=i;
i++;
scanf("%c",(a+i));

}

printf("input str b:\n");
scanf("%c",(b+j));
while(*(b+j)!='\n')
{
m=j;
j++;
scanf("%c",(b+j));
}

printf("input n:\n");
scanf("%d",&n);

for(k=l+m+1;k>n+m-1;k--)
*(a+k)=*(a+k-m);

for(k=n,i=1;k<n+m;k++,i++)
*(a+k)=*(b+i);

for(i=1;i<l+m+1;i++)
printf("%c",*(a+i));

getch();
}
应该是这样的,这分还是给你了

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

int main(void)
{
int len, n;
char *a,*b;

a = (char *)malloc(100);
b = (char *)malloc(100);

printf("input str a: ");
fgets(a, 100, stdin);
len = strlen(a);
a[len] = 0; //fgets会把换行符给存进去,所以要去掉。

printf("input str b: ");
fgets(b, 100, stdin);
len = strlen(b);
b[len--] = 0; //注意要减1。

printf("input n: ");
scanf("%d",&n); //n是int型,所以要用d。

//内存搬移,因为复制的目的地址与源地址可能会有重叠,所以不可用memcpy。
memmove(a + n + len, a + n, len);
memcpy(a + n, b, len);
printf("result = %s\n", a);
return 0;
}
PS:楼主开始学C的时候要注意风格(可以找本书看看),不要写的一坨坨的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-19
a
第2个回答  2011-08-19
加点分吧,太多了追问

万一没满意答案,这分不就浪费了吗,再说这代码,用puts,和lenstr,可以简化的,满意可以加分,

第3个回答  2011-08-19
输入字符串b的时候,是用的a串在接!
取n的时候,又是用的%c
这还不出错!!
而且就算改过来了,还是有很多Bug、、、