【问题标题】:Segfault when using strtok使用 strtok 时的段错误
【发布时间】:2015-02-24 21:21:02
【问题描述】:

如果我注释掉“printPigWord(temp);”,这个程序可以正常工作并且它将单词标记为它应该没有问题但是一旦我将该行添加回来,它就不会做下一个标记。它将打印 1 个“pig latin”单词并返回到 main,然后出现分段错误。我不知道是什么原因造成的。

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);

}

【问题讨论】:

    标签: segmentation-fault strtok


    【解决方案1】:

    哼哼。第一个只有一个字符长。您不能将内容连接到它,否则您会覆盖其他内容(例如 temp)...

    first[1] = '\0'; // already out of boundes
    
    /*add ay to end of first letter*/
    strcat(first, "ay"); // again, first can carry only one char
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多