获取字符串标记的长度

时间:2013-08-25 11:31:06

标签: c token strtok strlen

C编程:

我试图获取字符串中每个单词的长度,但无论我使用何种方法,都会遇到大量麻烦并出现分段错误。

我原本试图只使用“strlen(pstr)”,但这导致了分段错误。

这是我最近的尝试仍会导致分段错误:

void format_text(char* text)
{
    char* pstr;
    char  copied[1000];
    int   loop;
    int   strCnt = 0;
    int   temp;
    int   strSize[100];
    int   strNo[100];

    pstr = strtok(text, " ");
    while (pstr != NULL)
    {
        pstr = strtok(NULL, " ");
        strcpy(copied, pstr);
        strSize[strCnt] = strlen(copied);
        strCnt++;
    }

    printf("the number of strings is: %d\n", strCnt);
    for (loop = 0; loop < strCnt; loop++)
    {
        printf("The length of string %d is %d\n", loop + 1, strSize[loop]);
    }
}

如何获取并打印每个单词的长度(令牌)?

2 个答案:

答案 0 :(得分:1)

您不需要copied字符串来获取长度,您只需使用pstr即可。而且,您需要将strtok()放在strlen()之后,否则您将错过第一个单词的长度。

以下是应该起作用的:

    pstr = strtok(text, " ");
    while (pstr != NULL)
    {
        strSize[strCnt++] = strlen(pstr);

        pstr = strtok(NULL, " ");
    }

答案 1 :(得分:0)

当没有其他令牌返回时,strtok()函数返回pstr == NULL,但是您的代码没有注意到这一点,而是立即调用strcpy(copied, pstr);,这将导致您的崩溃。检查NULL并在使用pstr之前立即终止循环。

对于奖励学习点,请在调试器中完成此操作,以确切了解发生的情况。