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语句也不行,需要一些帮助,谢谢
我不能告诉你你看到的特定运行时错误的原因,但我打电话告诉你程序有什么问题:用户目录的硬编码路径.本地化名称只是尝试自己猜测路径可能出错的无数事物之一.
不要那样做.相反,读取环境变量或调用Shell API以找出此特定用户希望存储临时数据的位置(或文档,图片,桌面图标等).
看看getenv("TEMP")和ShGetSpecialFolderPath
由于以下行,您的程序将始终获得访问冲突:
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)