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

标签 c++ c pointers memory

wcstok_s功能是如何实现的?

wcstok函数只有两个参数,以及第二次调用时第一个参数为'null'时如何保存字符串。

这两篇是如何返回指针,函数结束以及为什么保留临时内存,会返回一个以'\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] = '\0';
            tnext = tszText + i;
            return res;
        }
    }
    res[rlen] = '\0';
    tnext = nullptr;
    return res;
}

wcstok_s 会忽略“”,例如“,,a”,它将返回“a”,如果我想要返回“”则返回“a”或“”,“”, “一个”。

最佳答案

应该在函数末尾修改 tnext 指向的指针,以将指针保存在最后一个匹配标记末尾后面的字符处,这样您就可以循环遍历所有匹配项,如下例所示:

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

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

关于c++ - 为什么wcstok_s函数的第三个参数是维度指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29860983/

相关文章:

C++ MySQL 无法连接到日语数据库名称

c++ - 自动矢量化感兴趣区域(裁剪)

c++ - 将图拆分为循环,然后拆分为路径

将电路转换为 C

java - 在 Java 中不使用 .size() 的环形缓冲区的lush() 和 isEmpty() 方法

c - 打印指针引发运行时错误

python - 添加swig pythoncode以在Python对象上设置thisown标志

c - 在 lex.yy.c 中,查找表代表什么?

c - 以太网数据包中的 MAC 地址与 TCP/IP 数据包有何关联?

c - 尝试在十六进制输入中使用小端和大端