为什么我的简单反向char*不起作用

why my simple reverse char* does not working?

本文关键字:char 不起作用 我的 简单 为什么      更新时间:2023-10-16

我用两种方式编写了这段代码尝试在visualstudio2012中运行-我将该项目作为简单的控制台应用程序打开,并获得访问估价异常。

代码1

void revReq(char* str)
{
     if(*(str+1) != '')
          revReq(str+1);
     putchar(*str);
}

代码2

void rev(char* str)
{
char* retVal = new char[strlen(str)]+1;
char* ptr = str + strlen(str)-1;
int i = 0;
while(ptr != str)
{
    retVal[i++]=*ptr;
    *ptr = '';
    ptr--;
}   
}

inpus是

    char* n = "abcdef";
revReq(n);

异常

Ex003.exe中0x00B11E7C处未处理的异常:0xC0000005:读取位置0xFFFFFFFF时发生访问冲突。

在第一个函数中,将指针str加1中的字符与"\0"进行比较。只有当char等效于有符号的char并且*str的内部代码等于255(-1)时,条件才能等于true。

void revReq(char* str)
{
     if((*str+1) != '')
          revReq(str+1);
     putchar(*str);
}

有效代码将显示为

void revReq( const char *s)
{
     if( *str )
     { 
          revReq( str + 1 );
          putchar( *str );
     }
}

第二个函数也是错误的。至少你必须写

char* retVal = new char[strlen(str) + 1];

而不是

char* retVal = new char[strlen(str)]+1;

还有内存泄漏。函数必须返回反转的字符串。

有效代码将显示为

char * rev( const char *s )
{
   size_t n = strlen( s );
   char *p = new char[ n + 1];
   const char *s1 = s + n;
   char *q = p;
   while ( s1 != s ) *q++ = *--s1; 
   *q = '';
   return p;
}

使用strlen(str)+1strlen函数返回不包括空字符"\0"的字符串大小