나는 천천히 배우고 코딩을 진행하고 있으므로 누군가가 나를 위해이 함수를 빠르게 살펴보고 내가 올바른 방향에 있다고 생각되면 그것을 더 잘할 수도 있고, 실패로 인해 나 자신을 위로 할 수도 있습니다. 저는 C의 세계에 익숙하지 않으므로 제발 쉬워주세요. 그러나 무뚝뚝하고 정직해야합니다. 순간 strncpy와 코드의 효율성
void test(char *username, char *password) {
printf("Checking password for %s - pw: %s\n",username,password);
char *query1 = "SELECT password FROM logins WHERE email = '";
char *query2 = "' LIMIT 1";
char *querystring = malloc(strlen(query1) + strlen(username) + strlen(query2) * sizeof(char));
strncpy(querystring,query1,strlen(query1));
strncat(querystring,username,strlen(username));
strncat(querystring,query2,strlen(query2));
printf("Query string: %s\n",querystring);
mysql_query(mysql_con,querystring);
MYSQL_RES *result = mysql_store_result(mysql_con);
int num_fields = mysql_num_fields(result);
int num_rows = mysql_num_rows(result);
if (num_rows != 0) {
MYSQL_ROW row;
printf("Query returned %i results with %i fields\n",num_rows,num_fields);
row = mysql_fetch_row(result);
printf("Password returned: %s\n",row[0]);
int comparison = strncmp(password, row[0], strlen(password));
if (comparison == 0) {
printf("Passwords match!\n");
} else {
printf("Passwords do NOT match!\n");
}
} else {
printf("No such user... Password is invalid");
}
free(querystring);
}
, 그것은 노력하고 있습니다 ... 출력 :
Checking password for [email protected] - pw: 5f4dcc3b5aa765d61d8327deb882cf99
Query string: SELECT password FROM logins WHERE email = '[email protected]' LIMIT 1
Query returned 1 results with 1 fields
Password returned: 5f4dcc3b5aa765d61d8327deb882cf99
Passwords match!
호출 :
test("[email protected]","5f4dcc3b5aa765d61d8327deb882cf99");
나는 내가 일한 수있는 방법에 입력을 찾고 있어요 문자열이 더 좋거나, 내가 어떻게했는지에 대해 예기치 않은 문제가있는 경우. 나는 C로 데이터 구조를 다루는 데 매우 익숙하다.
이 질문은 코드 검토 (http : // codereview를 시도하십시오.stackexchange.com). –
그리고 나는 if 문과 마지막 else 문을 포맷팅하는 것을 보았습니다 ... 죄송합니다. –
'strncpy'와'strncat'과'malloc'가 잘못 사용되고 있습니다. 이 코드가 작동하는 것으로 보이면 오히려 우연히 만나다 –