これはファイルauth.txt(ユーザー名パスワード)です
paolo 1234
luca 0000 marci1000
そして
これは私のコードです:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void onexit(char *u, char *p, char *l, FILE *f, int flag);
int main(int argc, char *argv[]){
FILE *fp;
char *tmp, *tmp2, *user, *pass, *line;
printf("Inserire utente: ");
if(scanf("%ms", &user) == EOF){
perror("scanf");
return EXIT_FAILURE;
}
printf("Inserire password: ");
if(scanf("%ms", &pass) == EOF){
perror("scanf");
onexit(user, NULL, NULL, NULL, 1);
return EXIT_FAILURE;
}
size_t max_length = strlen(user) + strlen(pass) + 3;
line = malloc(max_length);
if(line == NULL){
perror("malloc");
onexit(user, pass, NULL, NULL, 2);
return EXIT_FAILURE;
}
fp = fopen("/home/pol/auth.txt", "r");
if(fp == NULL){
printf("Errore apertura file\n");
onexit(user, pass, line, NULL, 3);
return EXIT_FAILURE;
}
while(!feof(fp)){
if(fgets(line, max_length , fp) == NULL){
perror("fgets");
onexit(user, pass, line, fp, 4);
return EXIT_FAILURE;
}
tmp = strtok(line, " ");
if(tmp == NULL){
perror("strtok");
onexit(user, pass, line, fp, 4);
return EXIT_FAILURE;
}
tmp2 = strtok(NULL, "\n");
if(tmp2 == NULL){
perror("strtok");
onexit(user, pass, line, fp, 4);
return EXIT_FAILURE;
}
if((strcmp(tmp,user) == 0) && (strcmp(tmp2,pass) == 0)){
printf("USER: %s - PASS: %s\n", tmp, tmp2);
onexit(user, pass, line, fp, 4);
return EXIT_SUCCESS;
}
else{
continue;
}
}
printf("no such user or pwd into DB\n");
onexit(user, pass, line, fp, 4);
return EXIT_FAILURE;
}
void onexit(char *u, char *p, char *l, FILE *f, int flag){
if(flag == 1){
free(u);
}
if(flag == 2){
free(u);
free(p);
}
if(flag == 3){
free(u);
free(p);
free(l);
}
if(flag == 4){
free(u);
free(p);
free(l);
fclose(f);
}
}
編集:別の問題!テストし
たい場合は、次のようになります
。Inserire utente:luca
Inserireパスワード:0000
strtok:成功
してプログラムが停止します。1番目と3番目の入力でのみ機能し、2番目の入力では機能しません。どうして??luca
0000