C++ (C+;+;/WinAPI)反向LPSTR

C++ (C+;+;/WinAPI)反向LPSTR,c++,winapi,chars,reversing,lpstr,C++,Winapi,Chars,Reversing,Lpstr,我有一些问题,以扭转LPSTR。 以下是我的功能: LPSTR Reverse(LPSTR a_lpText) { int nTextLength = strlen((char*)a_lpText); LPSTR lpReversed = (LPSTR) GlobalAlloc(GPTR, nTextLength + 1); for (int i = 0; i < nTextLength; ++i) *(lpReversed + i) = (CHAR) *(a

我有一些问题,以扭转LPSTR。 以下是我的功能:

LPSTR Reverse(LPSTR a_lpText)
{
   int nTextLength = strlen((char*)a_lpText);
   LPSTR lpReversed = (LPSTR) GlobalAlloc(GPTR, nTextLength + 1);
   for (int i = 0; i < nTextLength; ++i)
      *(lpReversed + i) = (CHAR) *(a_lpText + nTextLength - i);
   return lpReversed;
}
冻结整个程序。

试试这个)


最好检查一个LPU文本的长度是否为空和零GlobalAlloc。你只需要DDE,我无法想象你在这里使用。如果代码真的是C++,请使用<代码> Malc < /COD>或<代码> NeX[]/COD>。p> 如果您确实在使用需要
GlobalAlloc
的DDE API,请将
GlobalAlloc
部分与字符串代码分开。混合使用这两种关注点会导致代码无法维护

如果这真的是C++,那么<代码> STD::String 是你应该尽可能使用的。

我还认为,所有的强制转换和所有非标准Windows类型的宏都存在很大的混乱。这使得代码几乎不可读

正如Maximus所指出的,还有一个索引错误。不管它值多少钱,我都会这样写函数:

char* Reversed(const char* str)
{
   int len = strlen(str);
   char* reversed = (char*) malloc(len+1);
   reversed[len] = 0;//ensure return string has null-terminator
   for (int i = 0; i < len; ++i)
      reversed[len-1-i] = str[i];
   return reversed;
}
char* Reversed(const char* str)
{
   int len = strlen(str);
   char* reversed = new char[len+1];
   reversed[len] = 0;//ensure return string has null-terminator
   for (int i = 0; i < len; ++i)
      reversed[len-1-i] = str[i];
   return reversed;
}
人们应该始终努力编写没有强制转换的代码


当可以使用索引运算符
[]
时,不要自己进行指针运算。这样读起来容易多了。

您需要添加空终止符。@MikeKwan GPTR必须返回零初始化内存。为什么要使用GlobalAlloc?您为什么要将
LPSTR
转换为
char*
CHAR
从何而来,又何必施放?你只需要在这里施展一次。编辑2不能冻结。代码正在运行。如果是这样的话,请使用调试器并在其余代码中找到问题。您是否阅读了我的注释:“检查a_lpText是否为NULL和零长度”?
char* Reversed(const char* str)
{
   int len = strlen(str);
   char* reversed = (char*) malloc(len+1);
   reversed[len] = 0;//ensure return string has null-terminator
   for (int i = 0; i < len; ++i)
      reversed[len-1-i] = str[i];
   return reversed;
}
char* Reversed(const char* str)
{
   int len = strlen(str);
   char* reversed = new char[len+1];
   reversed[len] = 0;//ensure return string has null-terminator
   for (int i = 0; i < len; ++i)
      reversed[len-1-i] = str[i];
   return reversed;
}