Probleme avec la fonction find(en c++)

Fermé
alexis45 Messages postés 11 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 9 juillet 2009 - 23 févr. 2009 à 12:46
 loupius - 23 févr. 2009 à 14:32
Bonjour,
J'ai essayer de lire un fichier et de mettre le contenu dans une variable string mais je ne trouve pas d'autre solotion que de prendre la fonction fread et de mettre en premier parametre un pointeur string.Et après je veux rechercher une chaine de texte dans ce string(str) avec la fonction str.find("") mais comme c'est un pointeur ,mon compilateur(dev-cpp) dit qu'il y a une erreur.Voici mon code
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{

FILE *file=fopen("C:\\arme.ase","r+");
string * str;
size_t found;
fseek (file , 0 , SEEK_END);
long size= ftell (file);
str=(string*) malloc (sizeof(string)*size);
rewind (file);
fread(str,1,size,file);
found=str.find("*MESH_VERTEX_LIST {");/* Le probleme vient d'ici avec l'erreur "find is not a type"*/
printf("%ld\n\n",str);

system("PAUSE");
return EXIT_SUCCESS;
}
Quelqu'un connaitrait la solution svp?

1 réponse

Oh la la , je crois que tu mélanges...
D'abord tu dois écrire str->find(...) car 'str' est un pointeur, mais ça ne suffit pas.
'str' est un pointeur de la classe 'string'; donc tu ne peux l'utiliser comme une chaîne de caractère; donc tu ne peux écrire: str=(string*) malloc (sizeof(string)*size); mais str = new string;.
D'autre part 'fread' demande un pointeur de type 'void*' mais il ira déposer à cette adresse le résultat de sa lecture, donc on ne peut passer 'str'.
Même problème avec le printf("%ld\n\n",str); car 'str' n'est pas un nombre!
En conclusion est-il nécessaire d'utiliser une variable de classe string?
Je ne sais pas si j'ai la bonne solution, mais je propose de passer par une solution intermédiaire.
#include <cstdlib>
#include <iostream>
#include <string>
#include <string.h>
using namespace std;

int main(int argc, char *argv[])
{
	FILE* file = fopen("C:\\arme.ase", "r+");
	char* chn;
	fseek (file , 0 , SEEK_END);
	long size= ftell(file);
	chn = (char*) malloc(sizeof(char)*(size+1));
	rewind(file);
	fread(chn,sizeof(char),size,file);
	char* pfound = strstr(chn, "*MESH_VERTEX_LIST {");
	if (pfound)
		printf("%ld\n", (long)*pfound);
	// si tu veux absolument utiliser une classe string, tu peux écrire
	string* str = new string(chn);
	printf("%s\n", str->data());

	return EXIT_SUCCESS;
}
1