【发布时间】:2012-06-24 11:35:00
【问题描述】:
我正在使用 linux。
我有一个函数叫做:
PlayBackgroundIntroMusic((char *)"IntroMusic");功能是:
无效的声音管理器:: PlayBackgroundIntroMusic(char * musicFile) { // 为每个平台连接扩展 strcat(音乐文件,音频扩展); CCLOG("musicFile: %c" musicFile); SimpleAudioEngine::sharedEngine()->playBackgroundMusic(std::string(CCFileUtils::fullPathFromRelativePath(musicFile)).c_str(), false); }但我无法在线访问内存:
strcat(音乐文件,音频扩展);声明了audioExtension:
#包括 使用标准::字符串; #包括 使用 std::cout;使用 std::cerr;使用 std::endl; /** * 为每个平台声明声音扩展 * 安卓 = ogg * iOS = 咖啡馆 * WIN32 = mp3 */ #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 静态 const char * audioExtension = ".wav"; #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 静态 const char * audioExtension = ".caf"; #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 静态 const char * audioExtension = ".ogg"; #万一所以,我希望有:
iOS 上的 IntroMusic.caf Android 上的 IntroMusic.ogg发生了什么事?
注意:我已尝试:
char * musicFileWithExtension = strcat (musicFile,audioExtension);但还是没用。
musicFile 不是一个常数。如果文件名太长,如Example cc reference
,我不想声明 tempchar[80] 以避免溢出提前致谢。
【问题讨论】:
-
你的编译器试图告诉你一些事情。然后为了让它闭嘴,你添加了一个演员表。也许你应该听过。
-
没有演员表也能工作吗?练习:找出原因。
-
如果没有 (char *) 演员表,则会发送警告,取消创建转换,所以我进行演员表。到底是怎么回事?转换字符串有什么不好的用途吗?
-
您试图在没有存储空间的情况下连接某些东西。 AFAIR 一个普通的字符串文字的类型为“n const char 数组” - 来自 C++ 标准。
标签: c++ std string-concatenation cocos2d-x