首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-10 
请教一个关于指针的填空题!!!!!!!!!!!这个题目的解是什么呢。。。我第一感觉是S2根本就是空值啊。。。那最后为什

请教一个关于指针的填空题!!!!!!!!!!!
这个题目的解是什么呢。。。
我第一感觉是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);} 

热点排行
Bad Request.