【发布时间】:2020-09-15 03:05:04
【问题描述】:
有人可以帮我让这段代码正常工作吗? Reverse 方法是取一个 char 数组参数,并返回一个反转后的数组。然后我想在 main 中打印出来
#include <iostream>
#include <iomanip>
using namespace std;
char[] Reverse(char ch[]) {
char arr[sizeof(ch)];
for (int i=0; i< sizeof(ch); i++){
arr[i] = ch[sizeof(ch) -i -1];
}
return arr;
}
int main() {
char ch1[] = {'a', 'b', 'c'};
char ch2[] = Reverse(ch1);
cout << ch2[0] << endl;
return 0;
}
【问题讨论】:
-
sizeof(ch)在我的平台上是 8。看来您希望它是数组的大小。您需要将 Reverse 更改为具有char ch[], size_t len参数。char arr[len];将是一个可变长度数组,标准 C++ 不支持。稍后您将需要char* arr = new char[len];和delete[] arr。假设您不能使用std::string或std::vector。 -
@tadman "此代码仅适用于
sizeof(ch)为 1"sizeof(ch),Reverse函数内部等效于sizeof (char*),即在大多数平台上为 4 或 8。 -
任何处理原始 C 字符串的函数要么需要使用
strlen()来计算长度,NOTsizeof(),要么必须使用显式的size_t len论据。 -
@tadman • 这不是一个原始的 C 字符串,它是一个没有
'\0'终止的字符的 C 数组。这也将返回将被破坏的局部变量。呃,这么多呜呜呜。 -
@Eljay 很好的观察,虽然这是这段代码的另一个问题。使用
std::string可以清除其中的大部分内容,或者如果存在阻止这种情况的约束,则可以使用更传统的 C 样式方法。
标签: c++ arrays char reverse function-definition