长沙美食火宫殿吃什么:LoopMove
来源:百度文库 编辑:九乡新闻网 时间:2024/05/06 14:29:01
#include "stdio.h"
#include "string.h"
#include
#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赋值,此时就会出错: