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:
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?????
Tu utilise le tableau frame sans l'avoir initialiser...
C'est à mon avis la source de l'erreur...
__________________________
N'oubliez pas le tag 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.
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] et respectez la charte.
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].
#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
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#.
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
__________________________
[col]Woufeil[/col] et respectez la charte.
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 , surtout que j'ai découvert malloc à la volé et n'ai jamais eu l'occasion de réellement m'en servir
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 )...
Après, c'est sûr qu'il y a les string en C++ (#include<string>).
__________________________
Sujet résolu ? Pensez à mettre le tag
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#.
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 :