2015-02-24 66 views
0

如果我註釋掉「printPigWord(temp);」這個程序可以正常工作。並且它將這些詞標記爲沒有問題,但是一旦我將該行添加回來,它就不會執行下一個標記。它將打印1個「豬拉丁語」單詞並返回到主體,然後出現分段錯誤。我不知道是什麼原因造成的。使用strtok時出現Segfault

int main (void){ 
    char phrase[50]; 
    char *token, c, temp[20]; 
    int i=0; 

    printf("Enter a phrase to be translated into pig latin: "); 
    c = getchar(); 
    while(c != '\n'){ 
     phrase[i++] = c; 
     c = getchar(); 
    } 
    phrase[i] = '\0'; 

    token = strtok(phrase, " "); 

    while(token != NULL){ 
     strcpy(temp, token); 
     printPigWord(temp); 
     token = strtok(NULL, " "); 

    } 

    return 0; /*Successful completion*/ 
} 

void printPigWord(char token[20]){ 
    char first[1]; 
    char temp[20]; 

    /*save first letter */ 
    strncpy(first, token, 1); 
    first[1] = '\0'; 

    /*add ay to end of first letter*/ 
    strcat(first, "ay"); 

    /*remove first letter of token*/ 
    strcpy(temp, &token[1]); 

    /*add first letter+ay to end of token*/ 
    strcat(temp, first); 

    /*print out token*/ 
    printf("%s\n", temp); 

} 

回答

0

Hmpf。首先只有一個字符長。你不能連續的東西,否則你會覆蓋別的東西(例如臨時)...

first[1] = '\0'; // already out of boundes 

/*add ay to end of first letter*/ 
strcat(first, "ay"); // again, first can carry only one char 
+0

修復它!謝謝! – 2015-02-24 21:33:40