用malloc分配内存后,用memcpy将字符串复制进去

asdk77 2012-10-18 04:13:36
如题,用malloc 分配内存后,用memcpy 将字符串复制进去。若用字符数组指明长度就不会错。而用malloc则提示“Segmentation Fault - core dumped”(在ubuntu中运行)

#include"memory.h"
#include"stdio.h"
#include"string.h"

char d[30];
memcpy(d,s,sizeof(s)+1);
sprintf("%s",d);

return 0;
}*/

int main()
{char *s="asdgsadggh";
//char d[30]; 用字符数组就不会错
char *d=(char*)malloc(sizeof(char)*(1+strlen(s)));
memcpy(d,s,strlen(s)+1);
printf("%s",d);
return 0;

}

请高手指点!谢谢!
...全文
205 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
asdk77 2012-10-22
  • 打赏
  • 举报
回复
已解决,谢谢!
Joseph_1118 2012-10-18
  • 打赏
  • 举报
回复
看起来是malloc失败,但是一般malloc不会失败。
Eleven 2012-10-18
  • 打赏
  • 举报
回复
char *s="asdgsadggh";
int len = strlen(s);
char *d=(char*)malloc(sizeof(char)*(len + 1));
memset(d, 0, sizeof(char)*(len + 1));
memcpy(d,s,strlen(s));
printf("%s\n",d);
赵4老师 2012-10-18
  • 打赏
  • 举报
回复
Linux下:
进程意外退出会在当前目录下产生形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。
赵4老师 2012-10-18
  • 打赏
  • 举报
回复
请不要忘了free
{,}
fopen,fclose
malloc,free
new,delete
发帖,结帖
生,死

虎头蛇尾是俗人的习惯,
有始有终是君子的操守。
赵4老师 2012-10-18
  • 打赏
  • 举报
回复
请检查malloc的返回值
图灵狗 2012-10-18
  • 打赏
  • 举报
回复
只需要#include"stdlib.h"即可,另外这里最好用strcpy(d,s):

#include"memory.h"
#include"stdio.h"
#include"string.h"
#include"stdlib.h"

int main()
{char *s="asdgsadggh";
char *d=(char*)malloc(sizeof(char)*(1+strlen(s)));
memcpy(d,s,strlen(s)+1);
//strcpy(d,s);
printf("%s\n",d);
return 0;

}
酱油党 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

引用楼主 的回复:
如题,用malloc 分配内存后,用memcpy 将字符串复制进去。若用字符数组指明长度就不会错。而用malloc则提示“Segmentation Fault - core dumped”(在ubuntu中运行)

#include"memory.h"
#include"stdio.h"
#include"string.h"

char d[3……
[/Quote]毛线 , 跟这个 没关系 , VS系列木问题啊
酱油党 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
如题,用malloc 分配内存后,用memcpy 将字符串复制进去。若用字符数组指明长度就不会错。而用malloc则提示“Segmentation Fault - core dumped”(在ubuntu中运行)

#include"memory.h"
#include"stdio.h"
#include"string.h"

char d[30];
memcpy(d……
[/Quote]
memcpy(d,s,strlen(s)+1);//这句 , 你要复制的长度是strlen(s)+ 1 改成strlen(s)
//

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧