注册 登录
编程论坛 C++教室

数组指针问题,望告知!

sdg430 发布于 2010-07-21 15:53, 819 次点击
麻烦大家帮我看下下面的程序,我想输出的是。例如输入为“abcdefg",循环右移两位后输出应为“fgabcde",想看到下面这个loopmove的函数执行,但编译通过,执行时有错误,麻烦大家帮我看下应该怎么改,才能得出结果,另外还有个疑问就是tmp是个数组名,在 strcpy(tmp+steps,pstr);这句中,tmp应该是个指针常量,它可以进行tmp+steps这样的操作吗?麻烦各位了!
#include "stdio.h"
#include "string.h"

void loopmove(char* pstr,int steps)
{
    int n=strlen(pstr)-steps;
    char tmp[10];
    strcpy(tmp,pstr+n);
    strcpy(tmp+steps,pstr);
    *(tmp+strlen(pstr))='/0';
    strcpy(pstr,tmp);
}
int main()
{
    int steps=2;
    char* pstr="abcdefg";
 loopmove(pstr, steps);
    printf(" zhegeshi  %s/n",pstr);
    getchar();
    return 0;
}
7 回复
#2
mxs8102010-07-21 16:35
首先、转义字符使用错误
 *(tmp+strlen(pstr))='/0';
应该为
*(tmp+strlen(pstr))='\0';
 printf(" zhegeshi  %s/n",pstr);
应该为
 printf(" zhegeshi  %s\n",pstr);
其次,错误的使用了指针:
char* pstr="abcdefg";
应该这样
char pstr[10];
strcpy(pstr, "abcdefg");
最后,
tmp也就是数组的第一个元素的地址,是个指针,可以进行tmp++操作
tmp+steps标示第steps + 1个元素的地址

[ 本帖最后由 mxs810 于 2010-7-21 16:36 编辑 ]
#3
sdg4302010-07-21 16:45
回复 2楼 mxs810
都改正过来了,但最后执行时候还是有弹框!,这怎么回事呀
#4
sdg4302010-07-21 16:49
回复 2楼 mxs810
刚才搞错了,太谢谢你了,但我在有些地方上看到tmp[],这时的tmp指向数组的首地址,是个指针常量,不能进行tmp++这样的操作
#5
mxs8102010-07-21 18:29
以下是引用sdg430在2010-7-21 16:49:19的发言:

刚才搞错了,太谢谢你了,但我在有些地方上看到tmp[],这时的tmp指向数组的首地址,是个指针常量,不能进行tmp++这样的操作
我写的太马虎了,
tmp++是不对的,但是char *pNew = tmp + 2;这是可以的
#6
无名可用2010-08-16 21:54
char* pstr="abcdefg";
"abcdefg"是字符串常量,通过指针pstr只能读,不能改变该字符串常量,所以在代码执行到strcpy(pstr,tmp);时,你试图用一个新字符串来覆盖原字符串常量,这会引发内存错误。
#include "stdio.h"
#include "string.h"

void loopmove(char* pstr,int steps)
{
    int n=strlen(pstr)-steps;
    char tmp[10];
    strcpy(tmp,pstr+n);
    strcpy(tmp+steps,pstr);
    *(tmp+strlen(pstr))='\0';
    printf("*********\n");  //加上这一句看的更加清楚,这一句可以输出,紧接着就会报内存错误。。
    strcpy(pstr,tmp);
}
int main()
{
    int steps=2;
    char *pstr="abcdefg";
    loopmove(pstr, steps);
    printf(" zhegeshi  %s\n",pstr);
    getchar();
    return 0;
}
#7
holychild2010-08-22 13:44
1、*(tmp+strlen(pstr))='/0';这句改成*(tmp+strlen(pstr))='\0';
2、char* pstr="abcdefg";这句改成char pstr[]="abcdefg";
3、printf(" zhegeshi  %s/n",pstr);这句改成printf(" zhegeshi  %s\n",pstr);
#8
蛤蟆VS天鹅2010-08-22 14:26
回复 2楼 mxs810
高手就是高手,小弟在这有礼了
1