#include "stdio.h"
#include "string.h"
#include <stdlib.h>
#define MAX_LEN 20
void LoopMove(char *pStr,int
steps)
{
int n=strlen(pStr)-steps;
char tmp[MAX_LEN];
strcpy(tmp,pStr+n);
strcpy(tmp+steps,pStr);
*(tmp+strlen(pStr))='\0';
strcpy(pStr,tmp);
}
int main(void)
{
/*
int
i;
char *str=new char[100];
//动态内存分配并初始化
for (i = 0; i < 10; i++)
{
strcpy(str,"hello world");
LoopMove(str,i);
printf("%s\n",
str);
}
delete str;
//释放指针所指向的内存,此后指针为迷途指针
str=0;
//把迷途指针改为空指针
*/
char str[]="hello world";
LoopMove(str,5);
printf("%s\n",str);
return 0;
}
说明:
char str[]="hello
world";
此处,为什么str[]
改为*str则不能运行,出现错误:
因为char str[]="hello world";
是分配一个局部数组。局部数组是局部变量,它所对应的是内存中的栈。
而 char *str="hello
world";是分配一个全局数组。全局数组是全局变量,它所对应的是内存中的全局区域。
局部区的数据时可以修改的:
char
str[]="hello world";
str[0]='t';// ok
这里,str不占存储空间。
但是全局区域的值是不能进行修改的,如:
char
*str="hello world";
*str='t';//
false
此时,str占用一个存储区域。
所以,回到上面的程序,当执行LoopMove(str,5);后,单步运行到strcpy(pStr,tmp);时,会给str赋值,此时就会出错: