2012-05-18 3 views
2

사용자 구조체의 배열이 필요합니다.구조체를 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로 사용자의 배열을 초기화하기 위해서 올바른 방법 인 경우이다. 두 번째 문제는 * users [i] .username 및 특정 위치에 사용자를 가져 오거나 설정하려는 코드의 다른 부분이 작동하지 않는다는 것입니다. 감사합니다.

+0

코드를 올바르게 복사 했습니까? –

+0

한 줄을 업데이트했지만 나머지 코드는 올바르게 수정되었습니다. 나는 C 언어에 익숙하지 않기 때문에 "이상한"코드를 작성하면 놀라지 않을 것입니다. – user1324258

+0

빈 문자열 또는 NULL 대신 '\ 0'을 사용해야합니다 (예 : ''). – 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'에 대한 약어 (Syntactic sugar)입니다. – nullpotent

+0

아,하지만 "." 또 다른 의미가 있습니까? 그리고 코드를 살펴보면, 사용자 이름이 이미 있는지 확인하고 세그먼트 오류가 발생했는지 확인하려고했습니다. – user1324258

관련 문제