返回一个本地声明的wchar\t指针
我已经读了很多关于C语言中返回指针的问题,但是我仍然对范围的问题感到困惑 由于调用了返回一个本地声明的wchar\t指针,c,static,scope,return,C,Static,Scope,Return,我已经读了很多关于C语言中返回指针的问题,但是我仍然对范围的问题感到困惑 由于调用了malloc,下面的代码可以正常工作,一个可能的输出结果可能是Wide string:StackOverflow #include <stdlib.h> #include <string.h> #include <stdio.h> #include <wchar.h> static wchar_t *get_new_ptr(char *s) { size_
malloc
,下面的代码可以正常工作,一个可能的输出结果可能是Wide string:StackOverflow
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <wchar.h>
static wchar_t *get_new_ptr(char *s)
{
size_t len = strlen(s);
wchar_t *ws = NULL;
ws = malloc((len + 1) * sizeof(wchar_t));
mbstowcs(ws, s, len);
ws[len] = '\0';
return ws;
}
int main(int argc, char *argv[])
{
wchar_t *wstr = NULL;
if (argv[1])
wstr = get_new_ptr(argv[1]);
wprintf(L"Wide string: %ls\n", wstr);
return 0;
}
#包括
#包括
#包括
#包括
静态wchar\u t*get\u new\u ptr(字符*s)
{
尺寸长度=标准长度;
wchar_t*ws=NULL;
ws=malloc((len+1)*sizeof(wchar_t));
mbstowcs(西、南、北);
ws[len]='\0';
返回ws;
}
int main(int argc,char*argv[])
{
wchar_t*wstr=NULL;
if(argv[1])
wstr=获取新的ptr(argv[1]);
wprintf(L“宽字符串:%ls\n”,wstr);
返回0;
}
因为
ws
是本地声明的,所以wchar_*ws
是否被定义为静态的要将内存地址安全地返回到wstr
?可以返回局部变量,但不能返回指向局部变量的指针
int foo(void)
{
int var = 42;
return var; //OK
}
int *bar(void)
{
int var = 42;
return &var; //ERROR
}
在返回指针的情况下,重要的是该指针是否在函数返回后指向有效位置
在您的代码中,您使用的是动态内存分配,这没关系。因此答案是,不,没有必要将其声明为静态
在返回指针的情况下,重要的是该指针是否在函数返回后指向有效位置。因此,在第二个示例中,*bar
返回的引用在函数返回后不再存在,对吗?@HughMcMaster Correct。