gpt4 book ai didi

c++ - 为什么我的应用程序崩溃了?我的代码有什么问题?

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

char* szWords[] = { "caralho", "porra" };
if (IsGoldGrade(pObj)) //Ignore, its ok. //Crashing after i added the
{
for (int x = 0; x < sizeof(szWords); x++) {
if (strstr((strlwr((char*)szWords[x])), szChat)) {
char szBuffer[256];
sprintf(szBuffer, "You can't type %s", szWords[x]);
Announce(pObj, szBuffer);
memset(szBuffer, 0, 256);
return;
}
}
}

Idk,但我不能将其用作 stackoverflow 上的“代码”。

Pastebin:http://pastebin.com/u8yit8Rw

PS:我不能使用 StrStrI,因为我使用的是 Visual Studio 2003。

最佳答案

你的 for循环条件错误。您想迭代指向 char 的指针数组。
你的循环 for (int x = 0; x < sizeof(szWords); x++)继续 x < sizeof(szWords) .但是sizeof(szWords)不是数组长度。它只是说明您的数组在内存中占用了多少字节。它取决于系统,但它是指向 char 的指针大小的两倍,因此可能是 8 或 16 个字节。您需要将此大小除以数组元素的大小,然后您将获得正确的数组大小。

重写你的 for像这样循环:

for (int x = 0; x < sizeof(szWords)/sizeof(szWords[0]); x++)

或者如果您的编译器支持 C++11,您可以尝试基于范围的:

for (const char *word : szWords)

除此之外,如果您正在编写 C++ 代码,您确实应该使用 STL 和其他 C++ 功能。例如,您的字符串数组应声明为:

std::vector<std::string> words = { "caralho", "porra" };

或者如果你的编译器不支持 C++11(然后真的改变它......)

std::vector<std::string> words;
words.push_back("caralho");
words.push_back("porra");

for (std::size_t i = 0; i < words.size(); ++i) {
// since you are using C string functions you will need word as C string
const char *word = words[i].c_str();
// do whatever you want with word
}

还可以考虑在编写代码之前阅读现代 C++ 书籍。

关于c++ - 为什么我的应用程序崩溃了?我的代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40940834/

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