关于C语言程序,求大神帮忙解答

wumeilin1121 2013-04-24 09:19:45
轮换
串“abcd”每个字符都向右移位,最右的移动到第一个字符的位置,就变为“dabc”。这称为对串进行位移=1的轮换。同理,“abcd”变为:“cdab”则称为位移=2的轮换。
代码如下:
1 #include <string.h>
2 #include <stdlib.h>
3 void shift(char* s, int n)
4 {
5 char* p;
6 char* q;
7 int len = strlen(s);
8 char* s2;
9 ​if(len==0) return;
10 if(n<=0 || n>=len) return;
11 s2= (char*)malloc(sizeof(char)*(len+1));
12 ​ p = s;
13 q = s2 + n % len;
14 while(*p)
15 {
16 *q++ = *p++;
17 if(q-s2>=len)
18 {
19 *q = '\0';
20 q = s2;
21 }
22 ​}
23 strcpy(s,s2);
24 free(s2);
25 }
26 void main()
27 {
28 char str[10] = "zhanghe";
29 shift(str,2);
30 printf("%s\n",str);
31 }

请问11行为什么是len+1?
12行13行又是什么意思,p、q代表什么?
17行是什么意思?
...全文
90 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zailushang1988 2013-04-26
这个11行看着很揪心,sizeof结果是无符号的,但len是有符号的;
回复
紫日学C 2013-04-25
11行 是给字符串s2动态申请空间,因为字符串最后一位是'\0',所以要加1,不然会溢出 12行 p代表的是需要移动的原字符串的第一个字符 13行 q指向的是上次换轮的位置 17行 判断是否移动最后一位
回复
相关推荐
发帖
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2013-04-24 09:19
社区公告
暂无公告