gpt4 book ai didi

c - 返回一个指针,该指针是本地声明的 wchar_t

转载 作者:太空宇宙 更新时间:2023-11-04 08:25:12 25 4
gpt4 key购买 nike

我已经阅读了很多关于在 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_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;
}

因为 ws 是本地声明的,所以 wchar_t *ws 必须是 static 才能安全地将内存地址返回给 wstr?

最佳答案

返回一个局部变量是可以的,返回一个指向局部变量的指针是不行的。

int foo(void)
{
int var = 42;
return var; //OK
}

int *bar(void)
{
int var = 42;
return &var; //ERROR
}

在返回指针的情况下,重要的是函数返回后该指针是否指向有效位置。

在您的代码中,您正在使用内存的动态分配,没关系。所以答案是,不,没有必要将其声明为 static

关于c - 返回一个指针,该指针是本地声明的 wchar_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com