0

我试图将子字符串从一个 char* 复制到另一个,当我 printf(%c) 显示字符打印时,但在 add 方法结束时,我使用 printf(%s) 打印整个字符串并且没有打印出来。任何帮助表示赞赏 - 也可能是 C 中的子字符串比 char by 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);
}
4

1 回答 1

1

你的指数是错误的;当您实际上需要将其复制到范围 from to 中时,您将范围 from to 复制到范围new[start+1]from to中:new[end-1]alias[start+1]alias[end-1]alias[0]alias[end-start-2]

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

和类似地(比照了)actual

于 2012-10-23T22:26:28.200 回答