gpt4 book ai didi

c++ - 了解 strtok_s

转载 作者:行者123 更新时间:2023-11-28 02:56:15 25 4
gpt4 key购买 nike

我已经使用 C++ 多年了,所以请多多包涵。

我是一名 C# 开发人员,但这个 C++ 控制台应用程序坏了,我现在正在管理它。我目前正在使用 VS2010 对其进行调试。

由于保密和代码量大,我不能贴出所有代码。

控制台主要读取并解析一个 6MB 的 XML 文件。一切都过去了,直到昨天,我收到带有以下代码行的“访问违规读取位置 0xcccccccc”:

strtok_s(0, "=", &token);

当我将光标放在“&token”上时,我看到错误“token = 0xcccccccc”。

我想澄清一些事情:

strtok_s(buf, "=", &token);
strtok_s(0, "=", &token);
strtok_s(0, "=", &token);

0 作为参数在做什么?我假设在第一个 *strtok_s* 中,token 将指向 buf 中字符“=”的第一个实例。但是在第二条指令中,'0'的目的是什么?它是否在 token 中寻找“=”?

显然,XML 中发生了一些变化。所以,最后,考虑到这是在解析一个 6MB 的文件(包含 870K 行文本),而读取 XML 的 C++ 函数长达 700 多行,调试它的最佳方法是什么?不,割腕还没有被考虑......但是。

谢谢。

最佳答案

将 0 作为第一个参数传递(NULL 可能更具可读性)意味着“在字符串中查找下一个标记”。将 0xcccccccc 视为最后一个参数的值(“token”是错误的名称)告诉您从未在该字符串中搜索第一个 标记。换句话说,从未进行过对 strtok_s(buf, "=". &token) 的调用。或者“token”值未从先前对 strtok_s() 的调用中保留下来。所以它不再知道需要搜索什么字符串。轰隆隆。

无论哪种情况,它都是代码中不受字符串本身影响的严重错误。

关于c++ - 了解 strtok_s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21915010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com