来自多个函数的全局字符串的 C strtok

标签 c strtok

我使用要解析的全局字符串。解析是从多个函数完成的。 例如,我在 func1() 中提取第一个标记,然后在 func2() 中从同一个全局字符串中提取第二个标记,等等...
这可能吗?我知道在第一个之后提取 token 是由 strtok(NULL,delimiter) 完成的,strtok 将指向下一个字节的指针保存到用 null 替换的分隔符,但我找不到关于 strtok 究竟如何保存字符串的描述它在不同的函数中定义何时完成。

最佳答案

可能。 strtok 将字符串保存到静态内存。

例如

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

char sentence[] = "The quick brown fox jumps over the lazy dog";
char* sentencep = sentence;

char* func1(void){
    char* p = sentencep;
    if(sentencep != NULL)
        sentencep = NULL;
    return strtok(p, " ");
}

char* func2(void){
    char* p = sentencep;
    if(sentencep != NULL)
        sentencep = NULL;
    return strtok(p, " ");
}

int main(){
    puts(func1());//The
    puts(func2());//quick
    puts(func2());//brown
    puts(func1());//fox
    return 0;
}

关于来自多个函数的全局字符串的 C strtok,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8633849/

相关文章:

c++ - 是否有一种优雅且快速的方法来测试整数中的 1 位是否在连续区域中?

c - 字典攻击有时会在 C 中返回错误的密码

c++ - 如何在使用 eclipse CDT 调试时访问文本文件

c - 如果从 EXCEL 复制数据,strtok 不起作用

c++ - "bit padding"或 "padding bits"到底是什么?

c - 将 uint8_t 数组参数传递给除 uint32_t 之外的子例程(从 uint8_t 数组转换为 uint32_t 数组)

c - 为什么 strtok() 使我的程序返回负值?

c - 解析 C 中同一字段中有多个空格的行

c - 熟悉指针吗?

c - 这段代码中的段错误?