2012-11-26 6 views
0

J'essaye d'assigner des valeurs dans les ma structures. Cependant, je rencontre des difficultés. Je voudrais créer une liste qui contient des utilisateurs, des titres et des vues.C- Structures avec Attribution Char *

J'ai un struct comme indiqué ci-dessous

struct table{ 
    char *user[50]; 
    char *title[50]; 
    int views; 
} 

Je reçois les informations d'un fichier texte et je suis en train de lire la ligne de fichier texte en ligne et en attribuant les valeurs en conséquence.

struct table *tables; 
tables = malloc(50*sizeof(struct table)); 
FILE *ptr_file; 
char *name_file="2012-11-05-13-34.txt"; //change this later 

ptr_file=fopen(name_file, "r"); 
if(!ptr_file) 
    printf("Couldn't open file %s for reading.\n", name_file); 

printf("Opened file %s for reading.\n", name_file); 

line_number = 0; 
while(fgets(buffer, sizeof(buffer), ptr_file) != NULL){ 
    if(strcmp(buffer, "") == 0) 
     return 0; 
    char *views=strtok(buffer, ","); 
    char *name=strtok(NULL, ","); 
    char *title=strtok(NULL, ","); 
    tables[line_number].views=atoi(views); 
    strcpy(tables[line_number].user, user); 
    strcpy(tables[line_number].title, title); 
    line_number++; 
} 

Je reçois des erreurs comme char * _restricted_but mais l'argument est de type char **. Je me demandais si quelqu'un pouvait m'aider à m'expliquer cela ou s'il pouvait me diriger vers n'importe quel endroit où je pourrais trouver des exemples que je pourrais examiner.

Merci.

Répondre

4

struct table n'a pas de name membre c'est user.

Vous avez également user et title déclarés comme tableau de pointeurs, mais essayez de les utiliser pour conserver des chaînes, utilisez plutôt des tableaux char.

struct table{ 
    char user[50]; 
    char title[50]; 
    int views; 
} 

--EDIT--

Si vous souhaitez conserver le tableau de pointeurs (pour le tri ou autre), vous allez devoir allouer de la mémoire pour chacun pour stocker vos chaînes.

while(fgets(buffer, sizeof(buffer), ptr_file) != NULL){ 
    if(strcmp(buffer, "") == 0) 
     return 0; 
    char *views=strtok(buffer, ","); 
    char *name=strtok(NULL, ","); 
    char *title=strtok(NULL, ","); 
    tables[line_number].views=atoi(views); 
    tables[line_number].user[0] = strdup(user); // 
    tables[line_number].title[0] = strdup(title);// 
    line_number++; 
} 
+0

Désolé, j'ai changé le nom en utilisateur. Je voudrais garder ceux-ci en tant que pointeurs char * car je les utiliserai plus tard pour trier. – user1709294

+0

@ user1709294 voir modifier – Musa