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

发布于 2024-12-23 00:56:30 字数 225 浏览 1 评论 0原文

我使用要解析的全局字符串。解析是通过多个函数完成的。 例如,我在 func1() 中提取第一个标记,然后从 func2() 中的同一全局字符串中提取第二个标记,等等...
这可能吗?我知道第一个令牌之后的令牌提取是通过 strtok(NULL,delimiter) 完成的,并且 strtok 将指向下一个字节的指针保存到分隔符替换为 null,但我找不到 strtok 如何准确保存字符串的描述它在不同的函数中完成时进行分隔。

I use a global string that I want to parse. Parsing is done from multiple functions.
For example I extract first token in func1(), then second token from the same global string in func2() and etc...
Is this possible? I know that extraction of tokens after the first one is done by strtok(NULL,delimiter) and strtok saves the pointer to the next byte to the delimiter replaced with null, but I couldn't find the description how exactly the strtok saves the string it delimits when it's done in different functions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

流星番茄 2024-12-30 00:56:30

可能的。
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;
}

possible.
strtok saves the string to static memory.

E.g.

#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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文