這是文件auth.txt(用戶名密碼)
保羅1234
盧卡0000
馬爾西1000
這是我的代碼:ç查找字符串轉換成文件
#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);
}
}
編輯:另一個問題!
如果我想測試luca
與0000
我得到:
別名選擇utente:盧卡
別名選擇密碼:0000
strtok的:成功
和程序停止。 它只適用於第一和第三輸入,但不適用於第二!
爲什麼?
用另一個建議編輯了我的答案;我們最終會得到這個! –
我是否應該對我的最新編輯進行評論,以便讓您注意到?無論如何,我相信你現在應該能夠接受這個問題的答案,並且可以用它來完成。如果還有其他問題出現,請提出一個新問題。 – MvG
完成:)再次感謝! – polslinux