| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 816 人关注过本帖
标题:数组指针问题,望告知!
只看楼主 加入收藏
sdg430
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-5-17
结帖率:66.67%
收藏
 问题点数:0 回复次数:7 
数组指针问题,望告知!
麻烦大家帮我看下下面的程序,我想输出的是。例如输入为“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;
}
搜索更多相关主题的帖子: 指针 
2010-07-21 15:53
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:0 
首先、转义字符使用错误
 *(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 编辑 ]

授人以鱼不如授人以渔
2010-07-21 16:35
sdg430
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-5-17
收藏
得分:0 
回复 2楼 mxs810
都改正过来了,但最后执行时候还是有弹框!,这怎么回事呀
2010-07-21 16:45
sdg430
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-5-17
收藏
得分:0 
回复 2楼 mxs810
刚才搞错了,太谢谢你了,但我在有些地方上看到tmp[],这时的tmp指向数组的首地址,是个指针常量,不能进行tmp++这样的操作
2010-07-21 16:49
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:0 
以下是引用sdg430在2010-7-21 16:49:19的发言:

刚才搞错了,太谢谢你了,但我在有些地方上看到tmp[],这时的tmp指向数组的首地址,是个指针常量,不能进行tmp++这样的操作
我写的太马虎了,
tmp++是不对的,但是char *pNew = tmp + 2;这是可以的

授人以鱼不如授人以渔
2010-07-21 18:29
无名可用
Rank: 4
等 级:业余侠客
帖 子:79
专家分:259
注 册:2010-7-27
收藏
得分:0 
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;
}
2010-08-16 21:54
holychild
Rank: 2
等 级:论坛游民
帖 子:21
专家分:31
注 册:2010-8-22
收藏
得分:0 
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);
2010-08-22 13:44
蛤蟆VS天鹅
Rank: 3Rank: 3
来 自:徐州
等 级:论坛游侠
威 望:1
帖 子:26
专家分:110
注 册:2010-8-22
收藏
得分:0 
回复 2楼 mxs810
高手就是高手,小弟在这有礼了
2010-08-22 14:26
快速回复:数组指针问题,望告知!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015310 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved