谁能向我解释为什么我得到一个".exe遇到了一个问题,需要关闭"的错误,它编译和工作有时当我摆弄字符数组,但当它工作时,我有时在字符串的末尾得到奇怪的字符。
#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;
}
您不是在初始化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;
}
输出:<>之前缓慢的发展赢得了更多的财富之前查看它在ideone的在线工作
char *p;
从未初始化,但p[start]
被用作赋值的目标。你没有得到编译器警告吗?
您正在访问不是由程序分配的内存(p可以指向任何地方!)这就是你遇到问题的原因。
我强烈建议你
- 读入动态分配内存的主题,用new和delete来理解一个非常重要的主题
- 读入标准模板库,特别是std::string。你不应该使用像char*这样的原始指针,尽可能使用标准类型。
#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;
}