strtok()返回的字符串长度

时间:2013-11-30 21:28:19

标签: c

我想从字符串中找到单词的长度。当我在while循环中使用strlen(split)时,它没问题。但是当我从循环使用它时,我有分段错误错误。有什么问题?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    char string[] = "Hello world!";
    char* word = strtok(string, " ");
    printf("%d\n", strlen(word));
    while(split != NULL) {
        word = strtok(NULL, " ");
        printf("%d\n", strlen(word ));
    }
}

1 个答案:

答案 0 :(得分:4)

在致电strtok之前,您需要检查NULL是否未返回strlen

来自strtok man page(我的重点)

  

每次调用strtok()都会返回一个指向以null结尾的字符串的指针   包含下一个标记。此字符串不包括分隔符   字节。 如果找不到更多令牌,strtok()将返回NULL。

while(word != NULL) {
    word = strtok(NULL, " ");
    if (word != NULL) {
        printf("%d\n", strlen(word ));
    }
}

请注意,您的代码中也存在拼写错误。 while循环应该测试word而不是split