gpt4 book ai didi

c++ - 在 C++ 中使用 _tcstok 时出现 AccessViolation 错误

转载 作者:行者123 更新时间:2023-11-28 03:46:34 25 4
gpt4 key购买 nike

我正在尝试运行以下代码

TCHAR* str1 = TEXT("C:\\Program Files\\Internet Explorer;");     
const TCHAR* del = TEXT(";");
TCHAR* token = _tcstok(str1, del);

当我在 VS 2010 中运行它时,出现以下异常:
String_Tchars.exe 中 0x10275af4 (msvcr100d.dll) 的未处理异常:0xC0000005:访问冲突写入位置 0x0041839c。

我的目标是能够得到分号“;”之前的部分然后附加到该标记以获取最终字符串作为 c:\Program Files\Internet Explorer\iexplore.exe

有人可以阐明导致此异常的原因吗?

最佳答案

您只能使用 strtok() (及其 Windows 亲戚)具有可修改的字符串。所以让你的字符串成为本地字符数组:

TCHAR str1[] = TEXT("C:\\Program Files\\Internet Explorer;");
TCHAR* token = _tcstok(str1, ";");
// etc.

tokenizer 函数实际上通过用空字节替换定界符来修改字符串,因此您无法在只读字符串上使用它。

如果您的字符串是通过指向常量的指针传递给您的,请先将其复制到本地数组(例如复制到 std::vector<TCHAR> ):

void foo(const TCHAR * str)
{
std::vector<TCHAR> s(str, _tcslen(str) + 1); // local copy, includes null terminator
TCHAR * str1 = s.data(); // or &s[0]
TCHAR* token = _tcstok(str1, ";");
// ...
}

关于c++ - 在 C++ 中使用 _tcstok 时出现 AccessViolation 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7420373/

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