C++ 使用指针访问冲突写入位置
我正在创建一个程序,将单词的第一个字母放在单词的后面,这样单词就会变成ordW,我做得很好,但是当我决定将函数放入一个类时,它不起作用,我得到了访问冲突写入位置,我根本不知道它有什么问题,我将显示类代码和原始代码:C++ 使用指针访问冲突写入位置,c++,class,access-violation,C++,Class,Access Violation,我正在创建一个程序,将单词的第一个字母放在单词的后面,这样单词就会变成ordW,我做得很好,但是当我决定将函数放入一个类时,它不起作用,我得到了访问冲突写入位置,我根本不知道它有什么问题,我将显示类代码和原始代码: void test(char* first, char* buffer){ char* back = first; if (first != buffer + strlen(buffer) - 1){ ++back; char temp = *first; *
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);
}
}
类别代码:
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);
}
}
我不知道为什么在使用同一个函数但在一个类中时会出现错误。如果有人发现了错误,他们能否解释我为什么会出现错误以及如何修复,谢谢。我认为是打字错误
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。在这种情况下,我将使用调试器。Char temp=NULL;。为什么要这样做?类中如何声明test?void testchar*first,char*buffer;像这样@launeYou基本上是在改造std::rotate的一部分。使用std::rotate。