gpt4 book ai didi

c - 返回指向 C 结构内 char 数组的指针?

转载 作者:行者123 更新时间:2023-11-30 14:34:39 33 4
gpt4 key购买 nike

我在头文件中有以下结构:

static FILINFO fno;

看起来像这样:

typedef struct {
DWORD fsize; /* File size */
WORD fdate; /* Last modified date */
WORD ftime; /* Last modified time */
BYTE fattrib; /* Attribute */
char fname[13]; /* File name */
} FILINFO;

现在我想要某个函数返回一个指向 fname[] 的指针,这应该是可能的,因为该结构被定义为静态。这是我的功能:

char* get_open_file_name (void)
{
return fno.fname;
}

我从 main 调用这个函数,如下所示:

char* temp;

int main (void)
{
intialize_sd_card ();
...
...
temp = get_open_file_name();

这会导致类型冲突错误消息。但是,如果我尝试像这样调用它:

char* temp = get_open_file_name();

它有效。我在这里缺少什么?

编辑:这是我从 GCC 收到的实际错误消息

Severity    Code    Description Project File    Line
Warning assignment makes integer from pointer without a cast

最佳答案

只是一个大胆的猜测,但是这样的事情会在这里发挥作用吗?

#include <stdio.h>

typedef struct {
char fname[4];
} FILINFO;

static FILINFO fno;

char* temp;

char* get_open_file_name(void) {
return fno.fname;
}

int main(void) {
fno.fname[0] = 'L';
fno.fname[1] = 'o';
int temp; //my awesome hidden debug value, with regards, previous dev
fno.fname[2] = 'l';
fno.fname[3] = '\0';
if(1 /*or whatever*/) {
temp = get_open_file_name();
printf("%s\n", temp);
}
return 0;
}

由于局部范围的可见性规则,这个弗兰肯斯坦可以是合法的——当然,直到将 char 指针转换为整数为止。然后,如果您将 temp = get_open_file_name(); 替换为 char* temp = get_open_file_name();,它将正常工作。

一旦有问题的调试值消失,以下代码将使用 GCC 9.2.0 和 -s -O3 -std=c99 -pedantic -Wall -Wextra 进行完美编译和运行:

#include <stdio.h>

typedef struct {
char fname[4];
} FILINFO;

static FILINFO fno;

char* temp;

char* get_open_file_name(void) {
return fno.fname;
}

int main(void) {
fno.fname[0] = 'L';
fno.fname[1] = 'o';
fno.fname[2] = 'l';
fno.fname[3] = '\0';
temp = get_open_file_name();
printf("%s\n", temp);
return 0;
}

关于c - 返回指向 C 结构内 char 数组的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58886574/

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