[英]Returning a pointer to a char array inside a struct in C?
我在 header 文件中有以下结构:
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;
现在我想要某个 function 返回指向 fname[] 的指针,这应该是可能的,因为结构定义为 static。 这是我的 function:
char* get_open_file_name (void)
{
return fno.fname;
}
我从 main 中调用这个 function,如下所示:
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;
}
由于本地范围的可见性规则,这个 frankenstein 可以是合法的 - 当然,直到将 char 指针强制转换为 integer 为止。 那么如果你替换temp = get_open_file_name();
with 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.