2012-10-23 2 views
0

Im은 char *에서 다른 문자로 하위 문자열을 복사하려고하는데 printf (% c)는 문자 인쇄를 보여 주지만 add 메서드의 끝에서 printf (% s)를 사용하여 전체 문자열을 인쇄합니다 아무것도 인쇄하지 않습니다. 어떤 도움을 주셔서 감사합니다 - char에 의한 char보다 C에서의 하위 문자열에 대한 더 좋은 방법일까요? 아래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); 
} 

답변

1

귀하의 인덱스가 잘못; 당신은 alias[start+1]에서 alias[end-1],의 범위에 new[end-1]new[start+1]의 범위를 복사 실제로 alias[0]에서 alias[end-start-2]의 범위에 복사해야하는 경우 : 유사

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

과 (준용를) actual 위해.

+0

네, 프로그래밍의 초창기에 당신을 배웠던 항상 감사합니다. – Kairan