首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串排序 冒泡法 memcpy内存报错 。

2013-12-28 
字符串排序 冒泡法 memcpy内存报错 高手指点。。。void char_sort( char *in, int inlen){int i, jchar buf[

字符串排序 冒泡法 memcpy内存报错 高手指点。。。
void char_sort( char *in, int inlen)
{
int i, j;
char buf[20]={0}, str1[5]={0}, str2[5]={0};

for(j=1; j<=inlen-1; j++)
for(i=1; i<=inlen-j; i++)
{
memcpy(str1, i*19+in, 4);
memcpy(str2, (i+1)*19+in, 4);
if(strcmp(str1, str2)>0)
{
memcpy(buf, i*19+in, 19);
memcpy(i*19+in, (i+1)*19+in, 19); //???内存报错。??
memcpy((i+1)*19+in, buf, 19);
}
}
}


int main() 
{
char *in;
in = (char *)malloc(100);
in = "31220000000000000002222000000000000000192200000000000000011330000000000000002122000000000000000";
char_sort(in, 5);
printf("%s\n", *in);
free(in);
in = NULL;
}

字符串排序,每个字段19个字节,每个字段前4个字节有效。。。冒泡法排序 内存报错 高手指教。。。谢谢了。
[解决办法]
换成memmove函数!
memcpy不支持内存重叠的!
[解决办法]
in = "3122...改变指针指向常量区不可以改写其内容,不管memcpy或memmove都会报错吧。原申请100个内存地址也丢失。排序字串跑去搬动字符没啥效率,改用指针数组对指针进行排序吧...
[解决办法]
printf("%s\n", *in);这个地方出错了吧!!!
[解决办法]
2楼说的也在理!竟然你已经分配了内存就不要再给它赋地址值了!
in = "3122…… 这句的意思是把后面常量字符串的地址赋值给in的
这里最好换成strcpy/memcpy/等函数
[解决办法]

引用:
in = "3122...改变指针指向常量区不可以改写其内容,不管memcpy或memmove都会报错吧。原申请100个内存地址也丢失。排序字串跑去搬动字符没啥效率,改用指针数组对指针进行排序吧...

正解。楼主可以把常量字符串拷贝到你分配的内存中。

热点排行