2009-10-21 4 views
1

Comment placer des chaînes dans un tableau de char 2D à partir (par exemple) d'un fichier?Mettre des chaînes dans un chararray 2D dans C

char buffert[10][30]; 
int i = 0; 

while(!feof(somefile)) { 
    fscanf(somefile, "%s", temp); 
    buffert[i][] = temp; 
    i++; 
} 

Ceci ne le fera pas.

+0

Voir également cette remarque sur l'utilisation de feof comme ça: http://stackoverflow.com/questions/1588336/why-is-this-c-code-buggy –

+0

Ou, voir cette explication dans la FAQ C: http://c-faq.com/stdio/feof.html –

Répondre

-2

finir avec la température, et déposez chaque chaîne directement dans l'espace que vous avez créé pour elle (dans Buffert dans ce cas).

char buffert[10][30]; 
int i = 0; 
FILE * fp = fopen("myfile", "r"); 
while(!feof(fp)) { 
    fscanf(fp, "%s", buffert[i]); 
    i++; 
} 

Ici, le pointeur de fichier est appelé fp. Vous devrez faire un tas de vérifications pour éviter de déborder les 10 entrées disponibles dans buffert, ou les 30 caractères disponibles dans chacune de ses chaînes. Vous devriez également éviter feof().

+1

Cela a deux problèmes: Une longue chaîne trop longue, ou trop de chaînes, débordera 'buffert'; et quand la fin du fichier est atteinte, 'i' sera incrémenté une fois de trop, car la valeur de retour de' fscanf' n'est pas testée. – caf

+1

Je suis d'accord, c'est pourquoi je fais une mise en garde sur les contrôles. Cependant, je veux fournir la variation la plus simple qui démontre le point que le PO a besoin. C'est une chose pédagogique. –

+1

-1 Voir http://c-faq.com/stdio/feof.html –

4

Essayez ceci:

while(i < 10 && fscanf(somefile, "%29s%*[^ \t\n]", buffer[i]) != EOF) { 
    i++; 
} 

Le spécificateur de format "%29s" lit jusqu'à 29 caractères dans buffer[i], ce qui est tout ce qu'il a l'espace pour. Le "%*[^ \t\n]" lit et rejette les espaces non-blancs, au cas où la chaîne comporterait plus de 29 caractères.

En outre, while (!feof()) { } est presque toujours la mauvaise chose à faire, car EOF n'est pas définie sur le flux jusqu'à la fin du fichier.

+0

Ok, bonne réponse Je vais vérifier sur ce truc plus avancé avec une vérification intégrée plus tard. –

0

volés de this forum:

#include <stdio.h> 

main() 
{ 
    int dirsize = 80; 
    char array[9][dirsize]; 
    int linenum = 0; 
    FILE *filepointer; 
    filepointer = fopen("projectfile.txt","r"); 
    while (feof(filepointer) == 0) 
    { 
    linenum++; 
    fgets(array[linenum], dirsize, filepointer); 
    } 
    fclose(filepointer); 
} 

Une autre solution avec un pointeur vers des tableaux au lieu de tableau de tableaux is here.

0

Il ne me semble pas que vous copiez la chaîne dans un tableau. Je suis surpris qu'il compile. est-ce que je manque quelque chose?

regardez dans strcpy ou strncpy, ou vous pouvez copier en utilisant pour les boucles.

Questions connexes