#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
void catstr(char *dest,char *src);
void main()
{
char *dest,*src="help you?";
src=(char *)malloc(256);
if((dest=(char *)malloc(80))==NULL)
{
printf("no memory
");
exit(1);
}
dest="Can I ";
catstr(dest,src);
puts(dest);
}
void catstr(char *dest,char *src)
{
int i=0;
while(*dest) dest++;
for(i=0;i<9;i++)
{
*dest=*src;
src++;
dest++;
}
}
以上是我的代码,可是一运行就显示停止运行,单步调试显示这个 test1_4.exe 中的 0x0116151a 处未处理的异常: 0xC0000005: 写入位置 0x011657c6 时发生访问冲突 。
想实现两个字符串连接起来,求各路高手指点怎么实现啊,这个程序是郭天祥那本书的例子,不知道为啥用不了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
dest="Can I "; 应该改成strcpy( dest, (char *)"Can I" )
看清楚再说了。
dest="Can I "; 应该改成strcpy( dest, (char *)"Can I" ) 。
改成strcpy( dest, (char *)"Can I" ) 还有泄露?
1、src指向只读空间,后面又拿去赋值(*dest=*src),是不行的。
2、src先赋值为字符串,然后才malloc,这样指针就变了,不指向字符串了。
作如下修改在C-FREE下编译通过:
- #include<stdio.h>
- #include<malloc.h>
- #include<stdlib.h>
- #include <string.h>
- void catstr(char *dest,char *src);
- int main()
- {
- char *dest;
- char *src;
-
- src=(char *)malloc(256);
-
- strcpy(src,"help you?");
-
- if((dest=(char *)malloc(80))==NULL)
- {
- printf("no memory
");
- exit(1);
- }
-
- strcpy(dest,"Can I ");
- puts(dest);
- puts(src);
- catstr(dest,src);
-
- puts(dest);
-
- return 0;
- }
- void catstr(char *dest,char *src)
- {
- int i=0;
- int slen=strlen(src);
-
- while(*dest) dest++;
-
- for(i=0;i<=slen;i++)
- {
- *dest=*src;
- src++;
- dest++;
-
- }
- }
复制代码搞定了,大神就是多啊,自己研究了代码半天也没想明白哪写错了,原来是这样溢出了,多谢
一周热门 更多>