이 양식에 대한 질문은 이전에 요청되었지만 본인의 상황에 맞는 것을 찾는 데 어려움이 있습니다.잘못된 형식 인수/호환되지 않는 포인터 유형 C
C에 익숙해지기 위해 포인터와 관련된 문제, 특히 문자열 문제가 있습니다. 나는 계속 오류를 일으키지 않으며, 내가 계속 잘못하고있는 것에 대해 머리를 감쌀 수 없다.
사용자 이름 : 암호 키/값을 읽고 주어진 값과 비교할 프로그램을 작성 중입니다.
typedef struct {
char user[BUF_MAX];
char pass[BUF_MAX];
} userpass;
다음 코드 :
char *authThread(char *filename, char *request){
List_t logins;
char user[BUF_MAX];
char pass[BUF_MAX];
char *saveptr = NULL;
char *listptr = NULL;
char *username = strtok_r(request, ":", &saveptr);
char *password = strtok_r(NULL, ":", &saveptr);
char *failCode = malloc(sizeof (char)*BUF_MAX);
sprintf(failCode, "0:%s:0", username);
char *successCode = malloc(sizeof (char)*BUF_MAX);
sprintf(successCode, "1:%s:%s", username, ticketSecret);
if (List_init(&logins)){
//Retrieve all the user:pass pairs from the auth file
FILE *fp = fopen(filename, "r");
while(fscanf(fp, "%s:%s", user, pass) != EOF){
userpass new;
//PROBLEM LINES BELOW+++++++++++++++++++++++++++++++++
strcpy(new->user, user);
strcpy(new->pass, pass);
List_add_tail(&logins, &new);
}//while
fclose(fp);
//See if the username/pass combination provided exists in the auth file
for (;;){
userpass *next = NULL;
//PROBLEM LINE BELOW+++++++++++++++++++++++++++++++++
List_next_node(&logins, &listptr, &next);
if (next == NULL) break;
//Match found, return required auth string
if (strcmp(next->user, username) == 0 && strcmp(next->pass, password) == 0){
return successCode;
}//if
}//for
return failCode;
}//if
else{
printf("Error creating auth list\n");
}//else
}//authThread
List_t는 링크리스트의 구현입니다, 나는이 userpass 구조체를 사용합니다. List_next_node 함수의 헤더는 다음과 같습니다.
int List_next_node (List_t *list, void **context, void **data);
위의 오류가 발생한 두 줄에 레이블을 붙였습니다. 컴파일을 시도 할 때 두 가지 오류가 발생합니다. 처음 두 줄에는 invalid type argument of â->â
이 있습니다. 나는이 문제를 모두 변수가 올바른 유형 없다는 의해 발생하는 것을 볼 수 있습니다 passing argument 2(3) of âList_next_nodeâ from incompatible pointer type
,하지만 난 그게 가능 볼 수 없습니다 :
한 두 번째 줄, 내가 얻을. 첫 번째 경우 new->user
은 문자 배열이어야하며 user
이어야합니다.
두 번째 경우에 List_next_node는 세 개의 매개 변수를 허용합니다. 리스트에 대한 포인터, 컨텍스트 포인터에 대한 포인터, 및 데이터 포인터에 대한 포인터를 포함한다. 내가 말할 수있는 한 모든 것이 그것이 있어야하는 유형입니다. 문자열 (char 배열)이 C에서 어떻게 작동하는지에 대해서만 상상할 수 있습니다.
을 기대하고, 마찬가지로
을'userpass'는 – tay10r
@TaylorFlores 예, 그것은을위한 타입 정의의 데이터 형입니다 구조체, 질문에있는 코드 바로 위에 표시되었습니다. – simonc
이전에 그런 식으로 사용 된 데이터 유형을 보지 못했습니다. 이상하게 보입니다. 이건'C++ '가 아닌가? 편집 : 고민, 구문 강조 나를 혼란 스러웠다. – tay10r