Bienvenue, j'ai un problème avec ma boucle. Il ne lit que la première ligne de fichier.txt. Avant d'ajouter de la funcition à scinder ma ligne par strtok_r, mes applications ne fonctionnent pas bien. Le but de ce temps de cette boucle est lit toutes les lignes du fichier et scinder la ligne de toussingle par "|" et ces parties ajoutent aux onglets appropriés.
Que devrais-je faire?
C'est mon code: films.txt: p>
3 Réponses :
Sur tout autre problème possible, ces lignes sont problématiques:
strcpy(movies[x]->title, title); movies[x]->year = year; strcpy(movies[x]->genre, genre);
films [x] -> foo = foo; code>) li>
- Vous devez dupliquer les chaînes d'autre que vous enregistrez une sous-adresses de Tekst em> qui est modifiée chaque boucle et peut être disparue lorsque vous les utiliserez LI>
ul>
SO P>
movies[x]->title = strdup(title);
movies[x]->year = year;
movies[x]->genre = strdup(genre);
@Pablokwiatkowski es-tu distincte des films [x] -> Titre et films [x] -> Genre sont car [] plutôt que de char *?
Je dois vérifier ça
ils sont char []
@Pablokwiatkowski ok, alors regardez le Strcpy, je viens de modifier ma réponse
@Pablokwiatkowski et qu'est-ce qui ajoute? un accident ?
Je ne vois pas comment cela répond à la question
@ 4386427 Que voulez-vous dire? Nous n'avons presque aucune infos, le code donné ne peut pas compiler, etc., je parle simplement des problèmes visibles, et comme vous pouvez le voir, Paul a dit les mêmes choses quelques minutes après moi
La question concerne "seulement la lecture d'une ligne du fichier" - je ne vois pas cette réponse en adressant que
@ 4386427 Je ne vois aucune réponse du tout de vous ;-)
Je ne réponds pas parce que je ne sais pas quelle est la réponse ... Je peux voir plusieurs bugs dans le code mais aucun qui explique le comportement op décrit
@ 4386427 Je crains que nous puissions simplement demander de fermer cette question car pas assez de matériau et de matériel donné est faux
@Pablokwiatkowski Que voulez-vous dire par "... et rien ne se passe"?
L'application ne me montre que ceci après cette ligne "processus retourné -1073741819 (0xc0000005) Heure d'exécution: 3.141 S Appuyez sur n'importe quelle touche pour continuer".
Je parie que chaque ligne est imprimée avec Mais vous oubliez que et identique pour les autres variables de chaîne. P> P> printf ("% s", Tekst); code>.
strutok code> n'est pas < / EM> Faites une copie de la chaîne. Ainsi (si vous avez vos missions fixées dans l'inverse), vous attribuez toujours des poinétrs dans la même variable
Tekst code> à tous vos films. Au lieu de cela, allouez la mémoire et copiez les chaînes: p>
Ou simplement utiliser STRUP () code> si disponible (presque n'importe où)
Oui, comme je l'ai fait dans ma réponse quelques minutes avant ^^
Voir les commentaires à votre question pour plus de bugs.
Mais tekst code> est lu avec
fgets code> avant chaque nouvelle impression, donc je ne peux pas voir comment cela explique qu'une seule ligne est imprimée dans la boucle
Tournez des avertissements de votre compilateur sur. Il y a quelques problèmes (bugs) qui peuvent contrarier le programme. Par exemple, attribuer un pointeur à un char.
Maintenant, j'ai ce problème "| Erreur: attribution à l'expression avec type de tableau |"
Il existe un certain nombre de bugs dans votre programme.
Pour commencer avec ceci: p> ensemble avec ceci: p> Vous définissez Erreur d'application 0xc0000005 (violation d'accès) L'erreur est généralement causée par votre ordinateur de ne pas pouvoir traiter correctement les fichiers ... P>
blockQquote> modifie la définition à: p> plus loin: p> changez-le à: P> titre code> en tant que
char code> mais
strtok_r code> renvoie un
char * code>. Par conséquent, vous écrasez la mémoire en stockant un «pointeur de caractère» dans une variable «Char».
Cela pourrait détruire le pointeur de fichier. L'erreur 0xc0000005 que vous obtenez (comme vous le mentionnez dans un commentaire) pourrait indiquer que: P>
struct movie { char title[100]; int year; char genre[100]; };
int main() {
int i = 0;
struct movie *movies[50];
for(i=0; i<50; ++i) movies[i] = malloc(sizeof *movies);
. . .
Les commentaires ne sont pas pour une discussion prolongée; Cette conversation a été déplacé pour discuter .
Bienvenue dans le débordement de pile. Veuillez lire Les pages d'aide , prendre The So Tour , lisez à propos de Comment poser de bonnes questions , ainsi que Cette question de contrôle . Enfin, essayez de créer un exemple de reproductible minimal pour nous montrer.
Titre = Films [x] -> Titre; Code> N'as-tu voulu dire
Films [x] -> Titre = titre; code>? Mais même ce serait faux ...
Veuillez travailler sur cette question de la question fournie par certains.
J'ai essayé de trouver une solution à ce problème, mais je ne pouvais pas :(
Commencez par nous montrer le contenu du fichier d'entrée.
Est-ce que le programme se bloque? (Astuce: ajoutez un imprimeur après la boucle tandis que)
Est
x code> initialisé à zéro? Comment
films code> défini? Vous devez nous montrer plus de code.
Changer
Titre de caractère; code> à
Char * Titre; code> etc.
Et qu'est-ce que
int an = atoi (année); code> signifie ??
Changer de caractère sur int
Il y a une chance que l'année
int = code> masque le
char * année; code> moins déroutant d'utiliser des noms différents.
Char Titre = NULL; CODE> ->
CHAR * TITLE = NULL; CODE> ET Ceci s'applique également aux lignes suivantes.
Ok mais il lit seulement une ligne
Quel est le deuxième bloc de code?
Vous n'avez toujours pas montré le fichier d'entrée ...
Il fonctionne d'ajouter le titre, l'année et le genre à mon fichier TXT
Avez-vous besoin de mon fichier.txt?
Nous avons besoin de films.txt!
@Pablokwiatkowski S'il vous plaît répondez à ces questions. a) Avez-vous essayé de mettre une déclaration d'impression après la boucle de temps et de l'avoir imprimé? b) Faites-vous tomber votre programme? c) Quel est le contenu des films de fichier.txt?
A) oui et il n'a rien imprimé :( b) non, une seule ligne et rien