当放入自己的新函数时,部分函数会停止工作

问题描述 投票:0回答:1

编辑: 花了好几个小时的时间来处理这个问题让我犯了愚蠢的错误,而且对错误的管理不善。 在 u16 return_address 后面添加 [268] 是正确的答案,但我现在得到的错误位于脚本的不同部分,我尚未解决。 对于占用您的时间,我深表歉意。我累了,错误地变得愚蠢和绝望。

第一次来,希望标题没问题。

我有一个 .h 文件,其中包含:

JRAPI u64 list_directory_contents(char *directory);

在 .c 文件中,我有一个以以下开头的函数:

u64 list_directory_contents (char *directory) {

这里有一段代码:

    // Convert directory name to wide-character string
    u16  dir_address[268];  
    u64 dest;               
    int errorD = mbstowcs_s(&dest, dir_address, 268, directory, 268);

这效果很好。

- 现在的问题-: 我想将此代码放在一个新函数中。 在我制作的 .h 文件中:

u16 get_absolute_path(char *directory);

在我制作的 .c 文件中:

u16 get_absolute_path(char *directory) {
    u16 return_address; 
    u64 dest;
    int errorDir = mbstowcs_s(&dest, return_address, 268, directory, 268);
    return return_address;
}

这是在旧地方发起的:

u16 dir_address = get_absolute_path(directory);

现在不行了。 Clang 说我需要在 return_address 前面放一个 & :

int errorDir = mbstowcs_s(&dest, &return_address, 268, directory, 268); 

但是,与其他问题相比,它的价值不再是它应该有的,并且使一切都停止工作。

将此代码放入函数中,我做错了什么? 非常感谢您的帮助!

u16 = 无符号 16 位整数,无符号短整型。 u64 = 无符号 64 位整数,无符号 long long。

我已经玩了几个小时的指针和地址、字符串大小、谷歌等。现在我迷路了。

编辑(我应该提到这一点): 当我按照原始代码声明字符串时:

u16 return_address[268];    

我从 clang 收到以下消息:

警告:与关联的堆栈内存地址 局部变量“return_address”返回[-Wreturn-stack-address] 返回返回地址; ^~~~~~~~~~~~~~

c function-pointers
1个回答
1
投票

看一下有效的代码:

u16  dir_address[268];  
u64 dest;               
int errorD = mbstowcs_s(&dest, dir_address, 268, directory, 268);

具体在

dir_address
,然后看不起作用的代码:

u16 return_address; 
u64 dest;
int errorDir = mbstowcs_s(&dest, return_address, 268, directory, 268);

请注意,您没有像使用

return_address
那样将
dir_address
声明为数组。将其更改为:

u16 return_address[268]; 
© www.soinside.com 2019 - 2024. All rights reserved.