我是C的初学者,我只有13年,所以我很确定错误是非常基本的。
我在学校很无聊,我开始写C关于“游戏”。
就是这样:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int * id;
int * posx;
int * posy;
char * name;
} entity;
int allocData(&entity) {
entity->id = malloc(sizeof(int));
if(entity->id == NULL) {
return 1;
}
entity->posx = malloc(sizeof(int));
if(entity->posx == NULL) {
return ;
}
entity->posy = malloc(sizeof(int));
if(entity->posy = NULL) {
return 1;
}
entity->name = malloc(sizeof(char) * 129);
if(entity->name == NULL) {
return 1;
}
return 0;
}
int main() {
entity player;
allocData(&player);
player.id = 0;
player.name = "loopback\0";
printf("ID: %d, Name: %s", player.id, player.name);
return 0;
}
但是GCC抱怨道。
main.c:11:15: error: expected declaration specifiers or ‘...’ before ‘&’ token
int allocData(&entity) {
^
我找不到错误,我不想在这里发帖,我确定我错过了一些蠢事。
答案 0 :(得分:4)
您的函数定义应将指针作为参数:
int allocData(entity *player);
答案 1 :(得分:3)
您的原型看起来不对:
int allocData(&amp; entity)//&lt; - 什么是类型?以及为什么它在这里的地址运算符?
应该是:
int allocData(entity * p_entity)
您还应该替换函数entity
中的所有allocData
变量名称 - 请记住entity
是您的类型名称,而不是变量。
答案 2 :(得分:3)
您不能在C中使用引用。
在这种情况下,您应该使用指针。
将行int allocData(&entity) {
更改为int allocData(entity *entity) {
,代码将编译。
虽然此更改将使代码编译,但您将通过将具有错误类型的数据传递给printf()
来调用未定义的行为:%d
期望int
,但是你通过了int*
。抛弃allocData()
中指向的指针也会导致内存泄漏。我不认为使用指针,除非它们是不合适的。
您的代码应该是这样的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> /* add this for using strcpy() */
typedef struct {
int id;
int posx;
int posy;
char name[129];
} entity;
/* now allocData() won't be needed because entity doesn't have any member to allocate pointer to */
int main(void) {
entity player;
player.id = 0;
/* use strcpy() to copy strings */
/* \0 here will be meaningless in this case, so I removed this */
strcpy(player.name, "loopback");
printf("ID: %d, Name: %s", player.id, player.name);
return 0;
}