我有一些问题可以逆转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;
}

函数,返回未初始化的LPSTR或一些奇怪的字符。
问题可能在转换中?感谢您的回答!

编辑1:strcat()不起作用。我只想逐个字符地复制字符。

编辑2:
*(lpReversed + i) = (CHAR) *(a_lpText + nTextLength - i - 1);

冻结整个程序。

最佳答案

与C++相比,它看起来更像是C代码,所以我会坚持使用这种风格。我不明白您为什么要使用GlobalAlloc。您只需要DDE,我可能无法想象您在这里使用DDE。如果确实是C++,请使用mallocnew[]

如果您确实使用的是需要GlobalAlloc的DDE API,则请将GlobalAlloc部分与字符串反向代码分开。将这两个问题混合在一起就导致代码无法维护。

如果这确实是C++,那么std::string是您应尽可能使用的。

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

Maximus指出也存在索引错误。对于它的值(value),我将编写如下所示的函数:

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;
}

您唯一需要的转换是malloc的返回值。如果您要使用new[],那么您甚至不需要这样做。在这种情况下,代码将如下所示:
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;
}

人们应该始终努力编写无强制转换的代码。

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

关于c++ - (C++/WinAPI)反向LPSTR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12883035/

10-11 00:57