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

graall Messages postés 27 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 2 novembre 2005 - 28 août 2005 à 14:08
graall Messages postés 27 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 2 novembre 2005 - 28 août 2005 à 16:51
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 août 2005 à 14:15
char beginning[0];
ZERO octet de buffer !!!

ciao...
BruNews, MVP VC++
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 août 2005 à 14:32
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/
0
graall Messages postés 27 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 2 novembre 2005
28 août 2005 à 15:24
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;
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 août 2005 à 15:43
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 août 2005 à 16:27
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/
0
graall Messages postés 27 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 2 novembre 2005
28 août 2005 à 16:51
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;
0
Rejoignez-nous