0

あるchar*から別のchar*にサブストリングをコピーしようとすると、printf(%c)で文字の印刷が表示されますが、addメソッドの最後に、printf(%s)を使用して文字列全体を印刷し、何も出力されません。何か助けていただければ幸いです-おそらく、char by charよりもCの部分文字列の方が良い方法ですか?

以下のコード:

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

あなたのインデックスは間違っています。実際にからの範囲にコピーする必要がある場合は、からの範囲をからのnew[start+1]範囲にコピーします。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 に答える