为什么我编写的C++单词反转代码运行后无任何输出?
问题原因
你的代码存在多处语法错误和内存访问问题,直接导致运行失败无输出,具体问题如下:
- 野指针非法访问:你声明了
char * str指针,但没有为其分配任何可写入的内存空间,直接执行str[i]=xxx的写入操作属于未定义行为,大概率会触发内存访问错误、程序直接崩溃,自然不会产生输出。 - 字符串长度计算函数不存在:C++ 标准库没有直接适配C风格字符数组的
length函数,要计算char*指向的字符串长度,需要引入<cstring>头文件后调用strlen函数,否则代码会编译失败,或是调用到你未定义的错误函数得到错误长度。 - 标准库命名空间缺失:标准输出对象
cout属于std命名空间,如果你没有提前声明using namespace std;,也没有写std::cout的话,代码无法编译通过。 - 函数返回值不匹配:你声明的函数返回类型是
void*,但整个函数没有任何return语句,属于语法错误,严格编译器会直接拒绝生成可执行文件。
修正后参考代码
#include <iostream> #include <cstring> using namespace std; void reverse(char * arr) { int len = strlen(arr); int endindex = len - 1; // 为反转后的字符串分配内存,长度+1存结束符'\0' char * str = new char[len + 1]; int i = 0; while(endindex >= 0) { str[i] = arr[endindex]; i++; endindex--; } str[i] = '\0'; cout << str; // 释放申请的堆内存避免泄漏 delete[] str; } // 测试用例 int main() { char test[] = "hello"; reverse(test); return 0; }
内容的提问来源于stack exchange,提问作者Ravi Teja Reddy A.
相关产品推荐
相关产品推荐

