C编程复制子串

时间:2012-10-23 22:19:48

标签: c string char substring strcpy

我试图将子串从一个char *复制到另一个char *,当我printf(%c)它显示chars打印时,但在add方法结束时,我使用printf(%s)打印整个字符串,什么都没有打印出。感谢任何帮助 - 对于C中的子串也可能是更好的方法,而不是char的char?

以下代码:

int aliasCount;

typedef struct Alias {
  char* alias;
  char* actual;
  struct Alias* next;
}Alias;

Alias* aliasHead;

void addAlias(char* new);

addAlias方法

void addAlias(char* new)
{
  strip(new);
  Alias* newAlias = (Alias*)malloc(sizeof(Alias));

  //Get start-end position for alias
  int start=0; int end=0; int countSpace=0;
  for(int i = 0; i < strlen(new); i++)
  {
    //Check for space
    if(new[i]==' ')
    {
        printf("found space %d\n",i);
        countSpace++;
        if(countSpace==1)
        {
          start=i;
        }
        else if(countSpace==2)
        {
          end=i;
          break;
        }
    }
  }

  //malloc memory
  newAlias->next=NULL;
  newAlias->alias=(char*)malloc(sizeof(char)*(end-start));
  newAlias->actual=(char*)malloc(sizeof(char)*(strlen(new)-end+1));

  //Get substring, 
  //Copy char by char from alias to node
  for(int i = 0; i < strlen(new); i++)
  {
    if(i>start && i<end) //Alias
    {
        newAlias->alias[i] = new[i];printf("'%c'",newAlias->alias[i]);
    }
    else if(i>end) //Actual command
    {
        newAlias->actual[i] = new[i];printf("'%c'",new[i]);
    }
  } 
  printf("%s\n%s\n",newAlias->alias,newAlias->actual);

  if(aliasCount==0)
  {
    aliasHead = newAlias;
  }
  else
  {
      Alias* curr = aliasHead;
      for(int i = 0; i < aliasCount; i++)
      {
        curr=curr->next;
      }
      curr->next = newAlias;
  }
  aliasCount++;
  printf("%s\n%s\n",aliasHead->alias,aliasHead->actual);
}

1 个答案:

答案 0 :(得分:1)

你的指数错了;您将范围从new[start+1]复制到new[end-1],范围从alias[start+1]alias[end-1],当您确实需要将其复制到alias[0]到{alias[end-start-2]的范围内时{1}}:

        newAlias->alias[i-start-1] = new[i];printf("'%c'",newAlias->alias[i]);

以及actual的类似( mutatis mutandis )。