سؤال

فيما يلي، أحاول تقسيم السلسلة دون إنشاء نسخ باستخدام strok

#include <string.h>

void func(char *c)
{
    char *pch = strtok (c,"#");

    while (pch != NULL)
    {
        pch = strtok (NULL, "#");
    }
}

int main()
{
    char c[] = "a#a\nb#b\n";

    char *pch = strtok (c,"\n");

    while (pch != NULL)
    {
        char *p = new char[strlen(pch)+1];
        strcpy(p, pch);

        func(p); //copy of pch

        pch = strtok (NULL, "\n"); //fails to get pointer to 'b#b'
    }
}
هل كانت مفيدة؟

المحلول

امم... strtok() قد يقوم بتخزين السلسلة المميزة في مخزن مؤقت ثابت.وبالتالي عندما الثانية strtok() ويسمى في func(), نتائج العملية الأولى (في main()) يبدو أن تضيع.نلقي نظرة على strtok_r().

نصائح أخرى

يستخدم strtok متغيرات ثابتة، وبالتالي لا يمكنه العمل مرة أخرى ولا يكون آمنًا على الإطلاق.strtok_r ليس C89/C99 فقط POSIX.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top