读书人

请问一个关于指针的填空题!

发布时间: 2012-04-10 21:03:56 作者: rapoo

请教一个关于指针的填空题!!!!!!!!!!!
这个题目的解是什么呢。。。
我第一感觉是S2根本就是空值啊。。。那最后为什么会复制给S呢。。
难道说在第二个空那里是在用一个函数赋值给S2了么。。。
还是不太懂啊。。
请各位大大赐教。。
感谢!!!!!!!

题目如下:
串“abcd”每个字符都向右移位,最右的移动到第一个字符的位置,就变为“dabc”,这就称为对串进行位移=1的轮换,同理,“abcd”变为“cdab”则称为位移=2的轮换,下面代码实现了对串S进行了位移为n的轮换,请补全代码。
void shift(char *s,int n)
{
char *p;
char *q;
int len=strlen(s);
if(len==0)
return;
if(n<=0||n>=len)
return;
char *s2=(char *)malloc(_______);
p=s;
q=s2+n%len;
while(*p)
{
*q++=*p++;
if(q-s2>=len)
{
*q=__________;
q=s2;
}
}
strcpy(s,s2);
free(s2);
}

[解决办法]
第一个填len+1
第二个填'\0'

必须要+1,strlen()给出的是不加'\0'的字符串长度

VC6.0下测试代码

C/C++ code
#include<stdio.h>#include<string.h>#include<malloc.h>void shift(char *s,int n);int main(){    char* ss = "abcdefg";    char* str =(char *)malloc(strlen(ss)+1);    if (str == NULL)        return 1;    strcpy(str,ss);    printf("%s\n", str);    shift(str, 3);    printf("%s\n", str);    return 0;}void shift(char *s,int n){    char *p;    char *q;    int len=strlen(s);    if(len==0)        return;    if(n<=0||n>=len)        return;    char *s2=(char *)malloc(len+1);    p=s;    q=s2+n%len;    while(*p)    {        *q++=*p++;        if(q-s2>=len)        {            *q='\0';            q=s2;        }    }    strcpy(s,s2);    free(s2);} 

读书人网 >C语言

热点推荐