c ++开关访问冲突

Cas*_*Roy 0 c++ switch-statement

我写的很简单,好吧,它应该是,但我收到这个错误,我不知道还能做什么,我的代码看起来像这样

int main()
{
    char *option;

    while(strcmp(option,"exit")!=0){

        int opt = GetSystemDefaultUILanguage();
        std::string lang;
        switch(opt)
        {
            case 3082:
                    lang = "number 3082";
                    break;
            case 1033:
                    lang = "number 1033";
                    break;
        }
        std::cout<<lang<<'\n';
        std::cin>>option;
    }

}
Run Code Online (Sandbox Code Playgroud)

当我编译它没有错误,但当我运行它,我得到一个这个错误
项目xxxx引发异常类EAccessViolation与消息'访问违规在地址zzzzz'.Process停止.使用"步骤"或"运行"继续.

编辑:
这是我的完整代码,现在更简单,但结果仍然相同.
即使我尝试使用if/else语句也不行,需要一些帮助,谢谢

Ben*_*igt 5

我不能告诉你你看到的特定运行时错误的原因,但我打电话告诉你程序有什么问题:用户目录的硬编码路径.本地化名称只是尝试自己猜测路径可能出错的无数事物之一.

不要那样做.相反,读取环境变量或调用Shell API以找出此特定用户希望存储临时数据的位置(或文档,图片,桌面图标等).

看看getenv("TEMP")ShGetSpecialFolderPath


Zac*_*and 5

由于以下行,您的程序将始终获得访问冲突:

char *option;

while(strcmp(option,"exit")!=0){

std::cin>>option;
Run Code Online (Sandbox Code Playgroud)

你永远不会初始化指针option,但然后尝试使用它.将您的代码更改为:

int main()
{
    std::string option;

    while(option != "exit")
    {
        int opt = GetSystemDefaultUILanguage();
        std::string lang;
        switch(opt)
        {
            case 3082:
                    lang = "number 3082";
                    break;
            case 1033:
                    lang = "number 1033";
                    break;
        }
        std::cout<<lang<<std::endl;
        std::cin>>option;
    }
}
Run Code Online (Sandbox Code Playgroud)