【发布时间】:2013-11-25 20:06:23
【问题描述】:
这个问题本身就需要一个显而易见的答案。无论如何,这是我的代码的 sn-p...
switch(cSet)...
case 8:{ //Special Characters
finalSet = special;
char* charSet = new char[special.size() + 1];
charSet[special.size()] = 0; //Append null terminator
memcpy(charSet, special.c_str(), special.size());
break;
}
case 9:{ //Alphnumeric and Special character
finalSet = all;
char* charSet = new char[all.size() + 1];
charSet[all.size()] = 0; //Append null terminator
memcpy(charSet, all.c_str(), all.size());
break;
}
...
请注意,finalSet 的类型为 std::string。我需要将其保存为字符数组。在这个语句之后,我在 switch 语句之外调用charSet:
for(int i = 0; charSet; i++)
printf("%s", charSet[i]);
现在,很明显 switch 语句是有条件的,所以变量可能并不总是被声明。所以 Visual Studio 2012 抛出错误“charSet 未定义”。不过,按照我的 switch 语句结构的方式,charSet 将始终被定义,否则程序将在 default 情况下退出。
为了解决这个问题,我尝试在 switch 语句的范围之外声明 charSet。但是,当我这样做时,由于某种原因,编译器会引发读取访问错误。
我很好奇如何解决这个问题。
感谢任何建设性的意见。
在switch语句之外声明时的错误码:
`Unhandled exception at 0x0F6616B3 (msvcr110d.dll) in cuda_comb.exe: 0xC0000005: Access violation reading location 0x00000061.`
【问题讨论】:
-
请详细显示其他错误。正如您所说,您应该声明 charSet 比 switch 语句大。
-
当然,给我一点时间......
-
您有两个不同的
charSet变量,在不同的范围内声明。当执行到达break语句时,您分配给charSet的任何值都将丢失,并且名称charSet在封闭块之外不可见。而且你有内存泄漏。 -
如果使用C++11,在一定程度上可以只使用
std::string的缓冲区作为可修改的字符数组。 -
看起来
for循环中的条件已关闭,您可能想要for (char *it = charSet; *it; ++it) printf("%c", *it);之类的东西
标签: c++ switch-statement