长沙美食火宫殿吃什么:LoopMove

来源:百度文库 编辑:九乡新闻网 时间:2024/05/06 14:29:01
LoopMove2011年07月16日 星期六 下午 08:49

#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赋值,此时就会出错: