RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 retrouver la taille d'une chaîne

Forum : IDE C++ - BORLAND C++
Sous Catégorie : Borland C++
Type du sujet : Sujet Normale
FAQ : FAQ IDE C++ - BORLAND C++

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGES : [1] [2] [3]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM IDE C++ - BORLAND C++

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
maha
Membre régulier
Inscrit : 23/04/2006
Messages : 68
Message
#108126
Posté le 21/08/06 à 13:15
Bonjour tout le monde,

Je suis en train de programmer sous Visual C++ 6.0. Je veux saisir une chaîne de caractères de taille variable composée de zéros et de uns et retrouver sa taille.

Mon problème c'est que je n'arrive pas à utiliser la fonction strlen pour retrouver la taille de la chaîne que j'ai saisie.

En fait, j'ai écris le programme suivant:



#include <stdlib.h> #include <iostream> using namespace std; int main () { int l; char frame [] ; int n; for (n=0; n<=5; n++) { cout<<\"saisir un bit \"; cin>> frame [n]; } l=strlen(frame); cout<< l; return 0; }


mais en compilant le programme, ce dernier me retourne le message d'erreurs suivant, signalant que ma chîne est de taille inconnue:

--------------------Configuration: essai_1 - Win32 Debug--------------------
Compiling...
main.cpp
C:\Documents and Settings\Administrateur\Bureau\essai\main.cpp(8) : error C2133: \'frame\' : unknown size
Error executing cl.exe.

essai_1.exe - 1 error(s), 0 warning(s)

Comment je dois procéder pour retrouver la taille d'une chaîne
qui va être saisie à l'execution du programme, donc qui n'est ni initialisée au début du programme ni de taille connue?????

Merci d'avance.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

maniacode
Superviseur :
- Sécurité
Modérateur :
- PHP
Chef de projet(s) :
- NSM-Noyau pour .

Avatar de maniacode
Inscrit : 21/08/2006
Messages : 352
Message
#108127
Posté le 21/08/06 à 13:41
Tu utilise le tableau frame sans l'avoir initialiser...

C'est à mon avis la source de l'erreur...
__________________________
N'oubliez pas le tag Image lorsque quelqu'un a répondu à votre question.
Merci de lire et de respecter les règlements des sections.
---
NSM - Site officiel ~¤~ Dreamseed, communauté des arts
---
La différence entre un homme politique et un expert en sécurité tient en ce fait que corrompu, le second est au chômage.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

Woufeil
Membre du club
Chef de projet(s) :
- AdminServ

Avatar de Woufeil
Inscrit : 21/09/2004
Messages : 826
Message
#108129
Posté le 21/08/06 à 13:45
Bonjour,

Bon, un tableau de taille dynamique en C++, ça ne se fais pac comme ça.
Mais vu que tu sembles débutant, je te conseille de faire autrement : déclare ton tableau assez grand (genre 128 élements) et met-y ce dont tu as besoin.

Maintenant, une petite explication sur les chaîne de caractères : elles se terminent toutes par la caractère \ 0 (sans espace) de code ASCII 0. La fonction strlen cherche ce caractère dans la chaîne qu'on lui passe et compte le nombre de caractères avant cette chaîne. Donc en utilisant ta méthode pour rentrer chaque caractère, il te suffit de rajouter \ 0 (toujours sans espace) à la fin et strlen marchera (pourvu que tu ai inclu le fichier string.h, ce que tu ne sembles pas avoir fait).

Maintenant, pour plus de facilité, tu peux faire un cin>>frame, qui te fera tout le boulot tout seul !

Bon courage pour la suite !
__________________________
[col]Woufeil[/col]
Image
Image et respectez la charte.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

pac
Co-Administrateur
Superviseur :
- Méthodologie.
Modérateur :
- Delphi
Chef de projet(s) :
- Jeu Awalé
- EcoSystem
- MySudoku

Avatar de pac
Inscrit : 08/04/2004
Messages : 6572
Message
#108151
Posté le 21/08/06 à 19:21
Salut maniacode, ne pourrais-tu pas mettre une image encore plus grande dans ta signature stp ? Merci.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu]Image.

Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

Czayfaboo
Co-Administrateur
Superviseur :
- Langages Dot.
Modérateur :
- CSharp (C#)
Chef de projet(s) :
- ID3.NET Library
- MoteurProg Work.

Avatar de Czayfaboo
Inscrit : 05/01/2005
Messages : 2859
Message
#108167
Posté le 21/08/06 à 22:18
Essaie avec le code suivant :


#include <iostream> using namespace std; int main() { int nBits = 8; char *chaine = (char*)malloc((nBits+1)*sizeof(char)); //ou malloc(nBits) vu que sizeof(char) = 1 for (int i = 0; i < nBits; i++) { cout<<"Entrez un bit : "; cin>>*chaine; chaine++; } *chaine = '\ 0'; //Sans espace (bug mp) chaine -= nBits; int taille = strlen(chaine); cout<<"Taille de la chaine : "<<taille<<endl; cout<<"Chaine : "<<chaine<<endl; system("pause"); return 0; }


Avec ca, tout fonctionne
__________________________
Sujet résolu ? Pensez à mettre le tag Image
Un problème en C# ? Vérifiez celui-ci n'est pas déjà résolu dans la FAQ et que le sujet n'est pas traité parmis les tutoriaux ou les articles avant de poster dans le forum C#.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Woufeil
Membre du club
Chef de projet(s) :
- AdminServ

Avatar de Woufeil
Inscrit : 21/09/2004
Messages : 826
Message
#108168
Posté le 21/08/06 à 22:27
Hum, Czayfaoo, des malloc en C++, c'est plutôt... moche.
Il vaut mieux préférer la méthode new. Mais ce code se base sur des allocations dynamiques, il vaut mieux d'abord savoir faire le tout en statique avec un tableau trop grand comme ceci :

#include <string.h> #include <iostream> using namespace std; int main () { int l; char frame [256] ; int n; for (n=0; n<=5; n++) { cout<<"saisir un bit "; cin>> frame [n]; } frame[n] = '\ 0'; //toujours sans espace... saleté de bug l=strlen(frame); cout<< l; return 0; }


Il semble bien plus compréhensible pour un débutant...

€dit : Czayfaboo, tu oublies de plus de libérer la mémoire avec free()... C'est sûr qu'en C#, tu ne t'embêtes pas avec ce genre de trucs Smiley
__________________________
[col]Woufeil[/col]
Image
Image et respectez la charte.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Spirit
Superviseur :
- C & C++
Modérateur :
- PHP
- Javascript
- MySQL
Avatar de Spirit
Inscrit : 07/04/2004
Messages : 1954
Message
#108169
Posté le 21/08/06 à 22:51
si tu es en c++ te fais pas chier et utilise les std::string
__________________________
Spirit - modérateur casu ^-^'

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Czayfaboo
Co-Administrateur
Superviseur :
- Langages Dot.
Modérateur :
- CSharp (C#)
Chef de projet(s) :
- ID3.NET Library
- MoteurProg Work.

Avatar de Czayfaboo
Inscrit : 05/01/2005
Messages : 2859
Message
#108175
Posté le 22/08/06 à 00:49
Woufeil dit :
Czayfaboo, tu oublies de plus de libérer la mémoire avec free()... C'est sûr qu'en C#, tu ne t'embêtes pas avec ce genre de trucs


Oui, c'est sûr que mon code est pas parfait... en même temsp, je fais quasiment plus de C++, c'est dja bien que j'ai réussi à faire ce code en quelques secondes Smiley, surtout que j'ai découvert malloc à la volé et n'ai jamais eu l'occasion de réellement m'en servir Smiley

Pour le tableau statique, c'est sûr que c'est pas bien compliqué, mais j'évite ce genre de code now parce que ca fait pas mal de mémoire non utilisée (même si c'est pas beaucoup, j'aime pas avoir des espaces non utilisés dans ce style là)...

Woufeil dit :
Hum, Czayfaoo, des malloc en C++, c'est plutôt... moche.

Pourquoi ? Après tout le C++ est une évolution du C et à part le concept objet qui a été rajouté et quelques autres petits trucs (assez important quand même), ca ne veut pas dire renoncer aux anciennces méthodes...
Sauf si un new marche à la place de mon malloc (dans ce cas dsl, je savais pas Smiley)...

Après, c'est sûr qu'il y a les string en C++ (#include<string>).
__________________________
Sujet résolu ? Pensez à mettre le tag Image
Un problème en C# ? Vérifiez celui-ci n'est pas déjà résolu dans la FAQ et que le sujet n'est pas traité parmis les tutoriaux ou les articles avant de poster dans le forum C#.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

maha
Membre régulier
Inscrit : 23/04/2006
Messages : 68
Message
#108179
Posté le 22/08/06 à 08:17
Bonjour,

Merci bien pour vos aides. Smiley

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Woufeil
Membre du club
Chef de projet(s) :
- AdminServ

Avatar de Woufeil
Inscrit : 21/09/2004
Messages : 826
Message
#108185
Posté le 22/08/06 à 10:07
Czayfaboo dit :
Pour le tableau statique, c'est sûr que c'est pas bien compliqué, mais j'évite ce genre de code now parce que ca fait pas mal de mémoire non utilisée (même si c'est pas beaucoup, j'aime pas avoir des espaces non utilisés dans ce style là)...

Malheureusement, ce qui fait le plus mal à la mémoire, c'est en général des malloc non libérés, tous les programmeurs C te le diront...
Donc, juste pour info, si tu (ou maha, ou n'importe qui d'ailleurs) est amené à utiliser un malloc(), libère la mémoire avec free() comme ceci :

char* chaine = (char*)malloc((nBits+1)*sizeof(char)); [...] free (chaine);


Czayfaboo dit :
Sauf si un new marche à la place de mon malloc (dans ce cas dsl, je savais pas )...


Oui, on peut le faire avec un new Smiley


char chaine = new char[nBits+1]; [...] delete[] chaine;


Voilà pour la petite leçon !
__________________________
[col]Woufeil[/col]
Image
Image et respectez la charte.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM IDE C++ - BORLAND C++



    PAGES : [1] [2] [3]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.