一个关于memcpy的问题

xliu2019 2003-03-29 03:42:51
有一段程序
#include<stdio.h>
#include<string.h>
char a[20]="sdfsdf";
void main()
{
char *p;char *str;
p=strchr(a,'f');
memcpy(str,a,p-a);
printf("%s",str);
}
运行结果为“sd\x2”,怎么会这样?
...全文
22 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
blue_fairy 2003-03-29
  • 打赏
  • 举报
回复
对不起,我拷贝你的代码,多拷贝了一行。
blue_fairy 2003-03-29
  • 打赏
  • 举报
回复
我想这对于你来说是个很好的教材,在这里你的 指针变量 str 没有被初始化,它所指向的内存地址是不确定的,这是一种野指针。对他的操作很危险,所以最好改成如下形式:
#include<stdio.h>
#include<string.h>
char a[20]="sdfsdf";
void main()
{
char *p;
char str[20];

memset(str, 0, sizeof(str));
p=strchr(a,'f');
memcpy(str,a,p-a);
printf("%s",str);
}
运行结果为“sd\x2”,怎么会这样?
bauhaus 2003-03-29
  • 打赏
  • 举报
回复
记得分配内存,这个是指针使用经常遇到的问题,分配内存的时候注意检查内存有效性。另外你可以使用栈空间
Lastdrop 2003-03-29
  • 打赏
  • 举报
回复
你这样很危险的,没有为str分配空间,就memcpy,会内存溢出的。
doer_ljy 2003-03-29
  • 打赏
  • 举报
回复
改成:
#include<stdio.h>
#include "alloc.h"
#include<string.h>
char a[20]="sdfsdf";
void main()
{
char *p;char *str;
str = (char *)malloc(10*sizeof(char)); /*分配内存*/
p = (char *)malloc(10*sizeof(char));
p=strchr(a,'f');
memcpy(str,a,p-a);
printf("%s",str);
}
kicool 2003-03-29
  • 打赏
  • 举报
回复
str没有初始化阿!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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