然而,我对C ++并不太满意;我的代码已编译,但函数崩溃了我的程序,下面是代码的简短总结;它不完整,但函数和调用就在那里。
void rot13(char *ret, const char *in);
int main()
{
char* str;
MessageBox(NULL, _T("Test 1; Does get here!"), _T("Test 1"), MB_OK);
rot13(str, "uryyb jbeyq!"); // hello world!
/* Do stuff with char* str; */
MessageBox(NULL, _T("Test 2; Doesn't get here!"), _T("Test 2"), MB_OK);
return 0;
}
void rot13(char *ret, const char *in){
for( int i=0; i = sizeof(in); i++ ){
if(in[i] >= 'a' && in[i] <= 'm'){
// Crashes Here;
ret[i] += 13;
}
else if(in[i] > 'n' && in[i] <= 'z'){
// Possibly crashing Here too?
ret[i] -= 13;
}
else if(in[i] > 'A' && in[i] <= 'M'){
// Possibly crashing Here too?
ret[i] += 13;
}
else if(in[i] > 'N' && in[i] <= 'Z'){
// Possibly crashing Here too?
ret[i] -= 13;
}
}
}
该功能进入“测试1;到达这里!” - 但它没有达到“测试2;不会到达这里!”
先谢谢你。 -Nick Daniels。
答案 0 :(得分:2)
str
未初始化,并且在rot13
中被取消引用,导致崩溃。在传递给str
之前(在堆栈上或动态地)为rot13()
分配内存:
char str[1024] = ""; /* Large enough to hold string and initialised. */
for
内的rot13()
循环也不正确(infinte循环):
for( int i=0; i = sizeof(in); i++ ){
更改为:
for(size_t i = 0, len = strlen(in); i < len; i++ ){
答案 1 :(得分:0)
你有几个问题:
您永远不会为输出分配内存 - 您永远不会初始化变量str
。这就是导致你崩溃的原因。
您的循环条件始终计算为true(=分配并返回指定的值,==测试是否相等)。
你的循环条件使用sizeof(in)
来获取输入字符串的大小,但这实际上会给你指针的大小。请改用strlen
。
您的算法会将返回字符串中的值增加或减少13.输出字符串中的值与输出字符串中的初始值相比为+/- 13,而它们应基于输入字符串。
您的算法无法处理“A”,“n”或“N”。
您的算法不处理任何非字母字符,但您使用的测试字符串包含两个。