C++ (C+;+;/WinAPI)反向LPSTR
我有一些问题,以扭转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 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文本的长度是否为空和零这看起来更像C代码而不是C++,所以我会坚持这种风格。我不明白您为什么要使用
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;
}