分享

LoopMove

 SeasonInTheSunShine 2011-08-02
LoopMove
2011年07月16日 星期六 下午 08:49

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

 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多