cretto
(usa Outra)
Enviado em 07/05/2012 - 14:54h
Estou fazendo um codigo para efetuar o login em um sistema, eu crio um arquivo com 3 usuario e depois faço a leitura e na hora de formatar a string ele acaba pegando coisa a mais... se alguem conseguir ver o que estou fazendo de errado ficaria grato... segue o codigo abaixo com duas versoes de formatar a string em comentario:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int inicializar();
int criar_user(char *username, char *password, char *status);
int leitura();
int main() {
char username[20], password[20];
inicializar();
leitura();
return 0;
}
int inicializar(){
FILE *passwd;
//verifica se passwd existe, se nao existir cria e adiciona o user ROOT
if(!(passwd = fopen("passwd.bin", "rb"))){
//testa se o arquivo foi criado
if(!(passwd = fopen("passwd.bin", "ab"))){
printf("Erro no diretorio dos arquivos !");
return 0;
} else {
fclose(passwd);
//escreve o usuario no arquivo
criar_user("root", "root", "1");
criar_user("pedro", "pedro", "1");
criar_user("fernando", "fernando", "1");
}
} else {
fclose(passwd);
}
return 1;
}
int criar_user(char *username, char *password, char *status){
FILE *passwd;
char str[100];
int size;
int i=0;
//teste se o arquivo abre
passwd = fopen("passwd.bin", "a+b");
//formata a string para gravar no arquivo
strcpy(str, "{TEXTO}");
strcat(str, username);
strcat(str, " | ");
strcat(str, password);
strcat(str, " | ");
strcat(str, status);
strcat(str, "\n");
strcat(str, "{TEXTO}");
//pega o tamanho da string
size = strlen(str);
for(i=0; i<=size-1; i++){
fputc(str[i], passwd);
}
fclose(passwd);
return 0;
}
int leitura(){
FILE *passwd;
char str[100], str2[100];
char username[20], password[20], status[1];
char *partes;
int i;
passwd = fopen("passwd.bin", "r+b");
do{
strcpy(str, "{TEXTO}");
strcpy(str2, "{TEXTO}");
strcpy(username, "{TEXTO}");
i=0;
fgets(str, 100, passwd);
strcpy(str2, str);
//Metodo 1
/*
partes = (char*)strtok(str2, " ");//pega username
strcpy(username, partes);
partes = (char*)strtok(NULL, " ");//retorna |
partes = (char*)strtok(NULL, " ");//pega password
strcpy(password, partes);
partes = (char*)strtok(NULL, " ");//retorna |
partes = (char*)strtok(NULL, " ");//pega status
strcpy(status, partes);
strcpy(partes, "{TEXTO}");
*/
//Metodo 2
/*
do{
username[i] = str[i];
i++;
}while(str[i]!='|');
*/
puts(str);
//puts(username);
printf("\n");
}while(!feof(passwd));
fclose(passwd);
return 1;
}