在 C++ 中反转 char 数组会导致错误
Posted
技术标签:
【中文标题】在 C++ 中反转 char 数组会导致错误【英文标题】:Reversing a char array in C++ causing an error 【发布时间】:2011-03-28 15:17:22 【问题描述】:我正在使用以下代码来反转 char 数组。我的代码和错误可以在下面找到。
我的代码:
char * reverseStr(char* s)
int i=0; //legnth of string
while(s[i]) i++;
char reversed[i];
for(int j=0; j<i; j++)
reversed[j] = s[i-j - 1]; //look at this later
return *(reversed);
错误:
Compiling...
Compile error: your program did not compile correctly:
program.c: In function 'char* reverseStr(char*)':
program.c:18: error: invalid conversion from 'char' to 'char*'
--> 17:
--> 18: return *(reversed);
提前谢谢你!
【问题讨论】:
看起来像是 const 类型的问题。 possibility.com/Cpp/const.html 把完整的代码我认为错误在你代码的另一部分 你为什么返回一个字符而不是反向字符串的指针? 另一件事你不能创建一个变量类型的数组,它必须被修复你可以使用 new 操作符代替 char* reversed=new char[i];数组长度必须在编译时知道 您发布了错误的代码部分 - 错误在第 45 行或附近,可能在对 strcpy 的调用中。 【参考方案1】:你的返回值和类型是错误的。
此外,您的reversed
声明无效,无论如何都会泄漏内存。
另外,不建议使用 std::strlen
来计算字符串长度,标准库有 std::reverse
函数来反转字符串。
【讨论】:
:我认为声明char reversed[i];
应该导致错误而不是编译,而不是导致内存泄漏,因为i
不是const
。 C++ AFAIK 不支持VLA
s。
@Acme 这就是我所说的“无效”。但即使有 VLA 支持和固定的 return
语句,此函数也会泄漏无效指针。【参考方案2】:
好吧,您返回的是 char 而不是 char*,因此您只返回反转字符串中的第一个字母而不是字符串。这会导致您的错误消息,因为您尝试将 char 视为 char*。
【讨论】:
reversed
数组是在函数内部分配的,因此无论如何返回指向它的指针都是个坏主意。
没错,他需要用 new 分配那个数组。【参考方案3】:
检查错误信息:
program.c: In function 'int itoa2(int, char*, int)':
program.c:45: error: invalid conversion from 'char' to 'const char*'
它清楚地告诉你错误是什么:从 const char* 到 char 的无效转换
【讨论】:
【参考方案4】:在您的代码中,i
不是 const
。
char reverseStr(char* s)
int i=0; // --->> NOT CONST
while(s[i]) i++;
char reversed[i];
for(int j=0; j<i; j++)
reversed[j] = s[i-j - 1]; //look at this later
return *(reversed);
char reversed[i];
---> C++ 中的可变长度数组?? i
应该在编译时知道。
【讨论】:
【参考方案5】:strcpy 接收 (char*, const char*) 作为参数。但是,您的函数的返回类型是 char,因此出现错误。 并且char reversed[]是分配在函数的栈上的,请不要将其作为返回值。
【讨论】:
以上是关于在 C++ 中反转 char 数组会导致错误的主要内容,如果未能解决你的问题,请参考以下文章