无法通过指针索引访问结构数组成员
Unable to access struct array members by pointer index
我正在尝试访问全局结构数组中的数据。但是,以下应用程序崩溃了。
#include <stdio.h>
typedef struct {
char *fruit;
int score;
} t_fruitdata;
static t_fruitdata fruittable[] = {
{"Apple", 100},
{"Banana", 240},
{"Carrot", 40}
};
void main()
{
int table_len = sizeof(fruittable) / sizeof(t_fruitdata);
for (int i = 0; i < table_len; ++i)
{
t_fruitdata *fruitdata = fruittable + i*sizeof(t_fruitdata);
printf("At index %i fruit %s has a score of %i\n",
i,
fruitdata->fruit,
fruitdata->score);
}
}
输出:
At index 0 fruit Apple has a score of 100
[program terminates here]
我想我遇到了一些未定义的行为?但是我之前在stack overflow上看到过这个推荐的技巧。我在 windows 上使用 cl
用 Visual Code 2017 编译它。
在 t_fruitdata *fruitdata = fruittable + i*sizeof(t_fruitdata);
中,您没有正确递增指针。
#include <stdio.h>
typedef struct {
char *fruit;
int score;
} t_fruitdata;
static t_fruitdata fruittable[] = {
{"Apple", 100},
{"Banana", 240},
{"Carrot", 40}
};
void main()
{
int table_len = sizeof(fruittable) / sizeof(t_fruitdata);
t_fruitdata *fruitdata = fruittable;
for (int i = 0; i < table_len; ++i)
{
printf("At index %i fruit %s has a score of %i\n",
i,
fruitdata->fruit,
fruitdata->score);
fruitdata++;
}
}
我正在尝试访问全局结构数组中的数据。但是,以下应用程序崩溃了。
#include <stdio.h>
typedef struct {
char *fruit;
int score;
} t_fruitdata;
static t_fruitdata fruittable[] = {
{"Apple", 100},
{"Banana", 240},
{"Carrot", 40}
};
void main()
{
int table_len = sizeof(fruittable) / sizeof(t_fruitdata);
for (int i = 0; i < table_len; ++i)
{
t_fruitdata *fruitdata = fruittable + i*sizeof(t_fruitdata);
printf("At index %i fruit %s has a score of %i\n",
i,
fruitdata->fruit,
fruitdata->score);
}
}
输出:
At index 0 fruit Apple has a score of 100
[program terminates here]
我想我遇到了一些未定义的行为?但是我之前在stack overflow上看到过这个推荐的技巧。我在 windows 上使用 cl
用 Visual Code 2017 编译它。
在 t_fruitdata *fruitdata = fruittable + i*sizeof(t_fruitdata);
中,您没有正确递增指针。
#include <stdio.h>
typedef struct {
char *fruit;
int score;
} t_fruitdata;
static t_fruitdata fruittable[] = {
{"Apple", 100},
{"Banana", 240},
{"Carrot", 40}
};
void main()
{
int table_len = sizeof(fruittable) / sizeof(t_fruitdata);
t_fruitdata *fruitdata = fruittable;
for (int i = 0; i < table_len; ++i)
{
printf("At index %i fruit %s has a score of %i\n",
i,
fruitdata->fruit,
fruitdata->score);
fruitdata++;
}
}