为什么wcstok_s函数的第三个参数是维度指针?

Why the thrid parameter of the wcstok_s function is a dimensional pointer?

wcstok_s功能是如何实现的?

wcstok函数只有两个参数,第一个参数是'null'.

,第二次调用时如何保存字符串

这两个是如何return一个指针并且函数完成以及为什么保留临时内存并且它会return一个以'\0'结尾的*wchar字符串;

这是我的错误代码:

TCHAR *mywtok(TCHAR *tszText, int x, TCHAR *tnext) {
    TCHAR res[1005];
    if (tszText == nullptr)
        tszText = tnext;
    int len = wcslen(tszText);
    int rlen = 0;
    for(int i = 0; i < len; i++){
        if (tszText[i] != x) {
            res[rlen++] = tszText[i];
        }
        else {
            res[rlen] = '[=11=]';
            tnext = tszText + i;
            return res;
        }
    }
    res[rlen] = '[=11=]';
    tnext = nullptr;
    return res;
}

wcstok_s是忽略"",比如",a,"它会return "a",如果我想要return "" 然后 "a" 或 "","","a".

tnext 指向的指针应该在函数的末尾进行修改,以在最后一个匹配的标记末尾后面的字符处保存一个指针,这样您就可以像本例中那样遍历所有匹配项:

https://msdn.microsoft.com/en-us/library/ftsafwz3.aspx

所以,要回答你的问题,它是一个指向指针的指针,因为函数需要修改指针指针以允许循环。

TCHAR *mywtok(TCHAR *tszText, TCHAR *ch, TCHAR **tnext) {
    TCHAR res[1005];
    if (tszText == nullptr)
        tszText = *tnext;
    int len = wcslen(tszText);
    int rlen = 0;
    for(int i = 0; i < len; i++){
        if (tszText[i] != ch[0]) {
            res[rlen++] = tszText[i];
        }
        else {
            res[rlen] = '[=10=]';
            *tnext = tszText + i+1;
            wcscpy_s(tszText, wcslen(res)+1, res);
            return tszText;
        }
    }
    res[rlen] = '[=10=]';
    tnext = nullptr;
    wcscpy_s(tszText, wcslen(res)+1, res);
    return tszText;
}

指针只是修改它的值,指向指针的指针可以使指针指向其他位置。

但是为什么wcstok函数只有两个参数也可以使用nullptr作为第一个参数呢?