我正在创建一个程序,将单词的第一个字母放在单词的后面,以便#34; Word"会成为" ordW"我做得很好但是当我决定把这个功能放到一个它不起作用的类中时,我得到访问冲突写入位置我根本不知道它有什么问题,我将展示课程代码和原始代码:
班级代码:
void Checking::test(char* first,char* buffer){
back = first;
if (first != buffer + strlen(buffer) - 1){
++back;
temp = *first;
*first = *back;
*back = temp;
++first;
test(first, buffer);
}
}
注意:变量" back"和" temp"在类标题中声明如下:
Char* back = NULL;
Char temp = NULL;
原始代码:
void test(char* first, char* buffer){
char* back = first;
if (first != buffer + strlen(buffer) - 1){
++back;
char temp = *first;
*first = *back;
*back = temp;
++first;
test(first, buffer);
}
}
我不知道为什么在使用相同的功能但在一个类中时出现错误。如果有人发现错误,他们可以解释我为什么会收到错误以及如何修复,谢谢。
答案 0 :(得分:0)
我认为有一个错字
Char* back = NULL;
Char temp = NULL;
应该至少有
char* back = NULL;
char temp = NULL;
关键字char
是用小写字母c。
至于你的功能是否有效。在调用函数之前,您应该首先检查缓冲区的值。例如,如果首先指向终止零,那么这个条件
if (first != buffer + strlen(buffer) - 1){
将等于true,结果将与您的结果相同。
此外,我认为在函数外定义back和temp没有任何意义。
考虑到您可以使用标准算法std::rotate
我会按以下方式编写成员函数
void test( char* buffer ) const
{
if ( *buffer && *++buffer )
{
char c = *buffer;
*buffer = *( buffer - 1 );
*( buffer - 1 ) = c;
test( buffer );
}
}
它更有效,更简单,因为它只有一个参数,每次都不会调用std::strlen
。