我读到了char *,它应该被使用而不是它我应该只使用char []。它还涉及功能类型吗?我在下面粘贴了我读到的内容和下面的代码。
将放置" Hello world"在内存的只读部分,并使s成为指针,使得对此内存的任何写入操作都是非法的 What is the difference between char s[] and char *s?
char* GetModulePath()
{
char ownPth[MAX_PATH];
HMODULE hModule = GetModuleHandle(NULL);
if (hModule != NULL)
{
GetModuleFileName(hModule, ownPth, (sizeof(ownPth)));
}
return ownPth;
}
还可以吗?也许不是char *我应该使用const chars *? 编辑:添加了本文的链接,我已阅读。
答案 0 :(得分:1)
是的,没关系,但在你的情况下,你将返回一个指向局部变量的指针(在评论中提到)。
但无论如何,在C ++中你只需这样做:
std::string GetModulePath()
{
char ownPth[MAX_PATH] = {0};
HMODULE hModule = GetModuleHandle(NULL);
if (hModule != NULL)
{
GetModuleFileName(hModule, ownPth, sizeof(ownPth));
}
return std::string(ownPth);
}
答案 1 :(得分:1)
可以使用"Type of RHS ('double') must match LHS ('logical')
返回类型的函数,例如:
RHS
但是,您的代码有问题:您尝试返回本地变量char*
,这是一个问题。
在该行:
char* f() {
char* r = new char[20];
//Your logic
return r;
}
int main() {
char* v = f();
//More logic
//Don't forget to delete the dynamically allocated data when you don't need it
delete[] v;
}
你只需返回指向char数组的第一个元素的指针,它将被"销毁"在函数调用之后,尝试从外部取消引用返回的值将导致未定义的行为。
你应该做的就是使用ownPth
:
return ownPth;
或者,如果你真的想使用char数组,你应该使用堆分配(std::string
和std::string GetModulePath()
{
char ownPth[MAX_PATH] = {0}; // Zero initialization
HMODULE hModule = GetModuleHandle(NULL);
if (hModule != NULL)
{
GetModuleFileName(hModule, ownPth, (sizeof(ownPth)));
}
return std::string(ownPth);
}
),但我不推荐它:
new
正如下面的评论所说,这是非常糟糕的做法,而且在某些时候,你可能会忘记在使用它之后调用delete
,在函数调用之后,创建一个内存泄漏