gpt4 book ai didi

c++ - 使用 strcat 对内存的错误访问

转载 作者:太空狗 更新时间:2023-10-29 23:53:23 25 4
gpt4 key购买 nike

我正在使用 linux。

我有一个函数叫做:

PlayBackgroundIntroMusic((char *)"IntroMusic");

功能是:

void SoundManager::PlayBackgroundIntroMusic( char * musicFile){        // Concatenate extension for each platform        strcat (musicFile,audioExtension);        CCLOG("musicFile: %c" musicFile);  SimpleAudioEngine::sharedEngine()->playBackgroundMusic(std::string(CCFileUtils::fullPathFromRelativePath(musicFile)).c_str(), false);}

但是我无法在线访问内存:

strcat (musicFile,audioExtension);

声明了音频扩展:

#include using std::string;#include using std::cout; using std::cerr; using std::endl;/** * Declare sound extension for each platform * Android = ogg * iOS = caf * WIN32 = mp3 */#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)        static const char * audioExtension = ".wav";#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)        static const char * audioExtension = ".caf";#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)        static const char * audioExtension = ".ogg";#endif

所以,我希望有:

IntroMusic.caf on iOSIntroMusic.ogg on Android

发生了什么事?

注意:我已经尝试:

 char * musicFileWithExtension = strcat (musicFile,audioExtension);

但无论如何都没有用。

musicFile 不是常量。如果文件名太长,如 Example cc reference,我不想声明一个 tempchar[80] 以避免溢出。

提前致谢。

最佳答案

字符串文字,例如 "IntroMusic" 属于 const char[N] 类型,可以隐式转换为 const char *。由于语言设计中的一个错误,它也可以转换为 char*,但这种转换在 C++ 中是正确的,因此警告。您需要使用数组(动态或静态分配),而不是字符串文字。

或者更好的是,使用 std::string

关于c++ - 使用 strcat 对内存的错误访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11151626/

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