Problème de chaine de caractères (débutant)

Signaler
Messages postés
27
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
2 novembre 2005
-
Messages postés
27
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
2 novembre 2005
-
salut à tous,

j'ai un gros problème avec ce code :

(le problème est expliqué dans les commentaires)



FILE *pReference = fopen(reference_path, "r"); // ouvre un fichier contenant le texte "abcdef"



char beginning[0];

for(int i=0;i<include_position;i++) // ici, include_position vaut 2

{

beginning[i] = getc(pReference);

std::cout << beginning[i] << std::endl;

}



char end[0];

for(int
j=0;j<(reference_nb_char-include_position);j++) // reference_nb_char
est égal au nombre de caractère dans le fichier

{

end[j] = getc(pReference);

std::cout << end[j] << std::endl;

}



std::cout << "\n" << beginning; // affiche "ab"

std::cout << " - ";

std::cout << end << std::endl; //
devrait afficher "cdef" mais affiche "cdefj" et 3 autres caractères
bizarres

std::cout << strlen(beginning); // affiche 2

std::cout << " - ";

std::cout << strlen(end) << std::endl; // devrait afficher 4 mais affiche 8





Je suis débutant et mon code est surrement bourré de fautes...

6 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
char beginning[0];
ZERO octet de buffer !!!

ciao...
BruNews, MVP VC++
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
115
Tu essaye d'écrire dans des colonnes de tableaux non allouées ! Utilise
un malloc par exemple pour allouer assez de place pour ton tableau, et
utilise des pointeurs au lieu d'un tableau statique.

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
Messages postés
27
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
2 novembre 2005

voila, j'ai corrigé un peu mon code mais ca ne marche toujours pas :(

FILE *pReference = fopen(reference_path, "r");
char *beginning;
beginning = new char(include_position);
for(int i=0;i<include_position;i++)
{
beginning[i] = getc(pReference);
}
char *end;
end = new char(reference_nb_char-include_position);
for(int j=0;j<(reference_nb_char-include_position);j++)
{
end[j] = getc(pReference);
}
std::cout << beginning;
std::cout << " - ";
std::cout << end << std::endl;
std::cout << strlen(beginning) << " - " << strlen(end) << std::endl;
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Quand tu te mets devant un bouquin de C++ ??? tu n'es pas dans un langage interprété où on peut y aller par tatonnenment, le minimum est au moins d'apprendre la syntaxe, exemple ton 'new' avec des () au lieu de [], etc...

ciao...
BruNews, MVP VC++
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
115
Aïe ! Il faut utiliser New[] pour créer un tableau et non New qui alloue de l'espace pour une simple variable !



De même, ne pas oublier de désallouer la mémoire utilisée après utilisation si tu ne veux pas avoir une fuite mémoire !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
Messages postés
27
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
2 novembre 2005

désolé pour les parenthèses, c'était juste une faute de frappe

voila le code revu et corrigé :

FILE *pReference = fopen(reference_path, "r");
char *beginning;
beginning = new char[include_position];
for(int i=0;i<include_position;i++)
{
beginning[i] = getc(pReference);
}
char *end;
end = new char[reference_nb_char-include_position];
for(int j=0;j<(reference_nb_char-include_position);j++)
{
end[j] = getc(pReference);
}
std::cout << beginning;
std::cout << " - ";
std::cout << end << std::endl;
std::cout << strlen(beginning) << " - " << strlen(end) << std::endl;