2012-05-18 2 views
2

Мне нужен массив пользовательских структур.casting a struct in c

struct user { 
    char *username; 
}; 

struct user users[10]; //Array of user structs 

int main(int argc, char **args) { 
    int initUsersArray();   
    char *username = "Max"; 
    addToUsersArrry(username); 

} 



int addToUsersArrry(username) { 
int i; 
i = 0; 
struct user tmp;  
for(i;i<10;i++) { 
    if(users[i] != NULL) 
     if(strcmp(*users[i].username,username)==0) 
      return -1; 
} 
i = 0; 
for(i;i<10;i++) { 
    if(users[i] = NULL) { 
     users[i]=tmp; 
     users[i].username=username; 
     return 1; 
    } 

} 

} 

int initUsersArray() { 
int i; 
i=0; 
struct user tmp; 

for(i;i<10;i++) { 
    users[i] = (struct user*) calloc(1,sizeof(tmp)); 
} 
} 

Мой первый вопрос: если это правильный способ инициализировать массив пользователей с помощью NULL, как я. Вторая проблема заключается в том, что * Пользователи [i] .username и другие части кода, где хотите получить/установить пользователя в определенной позиции, не работают. С уважением

+0

Вы точно скопировали код? –

+0

Я обновил одну строку, но остальная часть кода скопирована. Я новичок в c, поэтому не удивляйтесь, если я написал «странный» код. – user1324258

+0

Вы должны использовать пустую строку или '\ 0' вместо NULL, т. Е. "". – Thor

ответ

1

Здесь я исправил его для вас. И не забудьте разобраться и чему-то научиться. Не просто c/p это.

#include <stdio.h> 
#include <stdlib.h> 

typedef struct user { 
    char *username; 
} user; 

user *users; //Array of user structs 

int addToUsersArray(char *username) { 
int i = 0; 

for(; i<10; i++) { 
    if(users[i].username=='\0') { 
     users[i].username = username; 
    return 1; 
    } else if(strcmp(users[i].username, username) == 0) 
    return -1; 
} 
return -1; 
} 

void initUsersArray() { 
    users = (user*) calloc(10, sizeof(user)); //10 of them 
} 

int main(int argc, char** argv) { 
    initUsersArray();   
     char *username = "Max"; 
     addToUsersArray(username); 
    username = "Ma1x"; 
    addToUsersArray(username); 
    printf("%s\n",users[0].username); 
    printf("%s\n",users[1].username); 
    return 1; 
} 
+0

Привет, спасибо за исправление. Где разница в использовании "." вместо "->"? – user1324258

+0

Это просто сокращение (синтаксический сахар) для '* (pointerToSomething) .field' – nullpotent

+0

Ah okey, но делает это." имеет другое значение? И посмотрите на свой код, я попытался проверить, существует ли имя пользователя, и получить segmentationfault. – user1324258