打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
LoopMove
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赋值,此时就会出错:

 


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【编程练习】字符串循环右移
用C语言编写一个函数,把一个字符串循环右移n位
字符串移位:如“abcdefghi”右移2位后变成“cdefghiab”
C/C 程序设计员应聘常见面试试题 strcpy
指针数组和数组指针
C语言测试题的讲解分析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服