任何人都可以向我解释为什么我得到一个“.exe遇到了问题并且需要关闭”错误,它有时会编译和工作当我摆弄char数组时,但是当它工作时我有时会得到奇怪的字符字符串的结尾。
#include <iostream>
using namespace std;
char* StrReverse3(char*);
char* StrReverse3(char* str)
{
char *p;
int length=0,start=0,end=0;
length=strlen(str);
for(start=0,end=length-1;end>= 0,start<=length-1;end--,start++)
{
p[start]=str[end];
}
return p;
}
int main()
{
char str[100]="Saw my reflection in snow covered hills";
StrReverse3(str);
cin.get();
return 0;
}
答案 0 :(得分:6)
您没有初始化p。这是你正在写的未初始化的指针。
由于您是用C ++编写的,而不是C,我建议使用std::string
和std::reverse
:
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
std::string str = "Saw my reflection in snow covered hills";
std::reverse(str.begin(), str.end());
std::cout << str;
return 0;
}
输出:
sllih derevoc wons ni noitcelfer ym waS
通过ideone
在线查看答案 1 :(得分:3)
char *p;
从未初始化,但p[start]
用作作业的目的地。你不接受编译器警告吗?我甚至对“有时工作”感到惊讶。
答案 2 :(得分:0)
您正在访问程序未分配的内存(p可以指向任何位置!)。这就是你遇到问题的原因。
我强烈建议你
答案 3 :(得分:0)
#include <iostream>
#include <cstring>
using namespace std;
char* StrReverse3(char* str){
int length=0,start=0,end=0;
length=strlen(str);
for(start=0,end=length-1;end > start;end--,start++){
char temp;
temp = str[start];
str[start]=str[end];
str[end]=temp;
}
return str;
}
int main(){
char str[100]="Saw my reflection in snow covered hills";
cout << StrReverse3(str);
cin.get();
return 0;
}