1

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

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

4

2 回答 2

1

您不需要copied字符串来获取长度,您可以简单地使用pstr. 而且,你需要把 放在strtok()后面strlen(),否则你会错过第一个单词的长度。

这是应该工作的:

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

        pstr = strtok(NULL, " ");
    }
于 2013-08-25T11:52:23.370 回答
0

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

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

于 2013-08-25T11:47:44.960 回答