+ -
当前位置:首页 → 问答吧 → strcpy()函数问题?

strcpy()函数问题?

时间:2011-12-15

来源:互联网


  在网上看到说实现一个循环位移函数,如"abcdefghi",移动2位之后,变成"hiabcdefg".

代码如下,我试的时候编译没有错误,但是运行就内存错误了,没想通。

  void LoopMove(char* pstr, int steps)
{
assert(pstr != NULL);
char temp[MAX_LEN];
int n=strlen(pstr)-steps;
strcpy(temp,pstr+n);
strcpy(temp+steps,pstr);
*(temp+strlen(pstr)) = '\0';

strcpy(pstr,temp); //为什么这里不行
}

char* a="abcdefghi";
LoopMove(a,2);
cout<<a<<endl;

大家说说,是什么原因?

作者: leijferrari   发布时间: 2011-12-15

a 指向的是常量区

作者: mougaidong   发布时间: 2011-12-15

http://blog.csdn.net/mougaidong/article/details/6372765

作者: mougaidong   发布时间: 2011-12-15

循环移位啊,O(n) ,编程之美上有列子.

作者: lthyxy   发布时间: 2011-12-15

貌似是这句的问题:char* a="abcdefghi";
你这样试试:char a[]="abcdefghi";

作者: pengjialaosan   发布时间: 2011-12-15

1楼正解。这个功能可以用

std::rotate()简单实现。0(n)

作者: mingliang1212   发布时间: 2011-12-15

引用 2 楼 mougaidong 的回复:

http://blog.csdn.net/mougaidong/article/details/6372765

这个很好。
strcpy的参数最好是字符数组。

作者: pengjialaosan   发布时间: 2011-12-15

这个可以用标准库中的memfrob函数实现,具体算法可见编程珠玑的第一部分

作者: logicouter   发布时间: 2011-12-15


  原来是常量的问题啊,,, 

  哎,看来基础还是不牢啊,谢谢各位了。

作者: leijferrari   发布时间: 2011-12-16