在 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 不支持VLAs。 @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 数组会导致错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中反转字符数组? [关闭]

使用数组重载运算符“=”会导致运行时错误 C++

错误赋值给数组类型的表达式

一个c++有关问题,当定义一个char 型数组时,用cin循环输入为啥会出错,怎么解决,代码如下

char数组如何存储在C++中?

在 C++ 中使用指针初始化 char 数组或字符串