Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1041 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problème fonction strlen /ubuntu

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème fonction strlen /ubuntu

n°2039576
aurel_gate​s
Posté le 02-12-2010 à 10:12:35  profilanswer
 

Bonjour, je dois réaliser un projet en C sous gedit dans ubuntu !  
J'utilise la fonction strlen dans le script suivant ! (oui oui je dois récupérer un entier dans un char, logique :p ) :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <biginteger.h>
  5. int main (int argc, char* argv[])
  6. {
  7. char nombre[5];
  8. */
  9. printf("Bienvenue !" );
  10. printf("Entrer un nombre\n" );
  11.        gets(nombre);
  12. printf("\nNombre en char: %s",nombre);
  13. return EXIT_SUCCESS;
  14. }


 
Sauf que quand je fais afficher la taille la chaine avec la fonction strlen, dans le debuggeur (gdb) par exemple, il me retourne toujours la valeur  -139608048
Pour n'importe quel mot !  
De même lorsque je fais print strlen("un mot au hazard" ) sa me fais la même chose !  
Et lorsque que j'intègre dans un printf, la fonction strlen, sa ne peut pas compiler !  
J'ai vérifier, il y a bien le caratère de fin de chaine !  
Je ne comprend pas trop ! Si vous pouviez m'aider !  
Merci d'avance !  

mood
Publicité
Posté le 02-12-2010 à 10:12:35  profilanswer
 

n°2039585
regexp42
Eplucheur de RFC.
Posté le 02-12-2010 à 10:57:37  profilanswer
 

aurel_gates a écrit :

Bonjour, je dois réaliser un projet en C


[:dr_doak]
 

aurel_gates a écrit :

sous gedit dans ubuntu !


[:joemoomoot]
 

aurel_gates a écrit :

J'utilise la fonction strlen dans le script suivant !


 
Hum, non, j'ai pas l'impression.  :D  

n°2039632
aurel_gate​s
Posté le 02-12-2010 à 13:43:25  profilanswer
 

Je l'utilise au niveau ds le printf mais comme sa marche je l'ai enlevé... et je compense par un print strlen(nombre) dans le débuggeur... qui me donne n'importe quoi !

n°2039638
regexp42
Eplucheur de RFC.
Posté le 02-12-2010 à 13:54:24  profilanswer
 

Ben montre ton code qui ne fonctionne pas... Ou au moins ce que tu fais avec ton debugger.

n°2039662
aurel_gate​s
Posté le 02-12-2010 à 14:59:36  profilanswer
 

Dans le debugger je tape :
gdb projet.exe
b projet.c : 15
r
gets(nombre) ;  
n
23243 --< nombre au hasard  
n
printf("\nNombre en char: %s",nombre);
print nombre  
$1=23243
print strlen(nombre)
$2=-139608048  
print strlen("chat" )
$3=-139608048  
 
voila ce que je rentre et ce que me renvoie le debugger!

n°2039664
aurel_gate​s
Posté le 02-12-2010 à 15:02:13  profilanswer
 

Voila mon code qui ne marche pas :) :  
 
  1. #include <stdio.h>
   2. #include <stdlib.h>
   3. #include <string.h>
   4. #include <biginteger.h>
   5.
   6. int main (int argc, char* argv[])
   7. {
   8. char nombre[5];
   9. */
  10. printf("Bienvenue !" );
  11. printf("Entrer un nombre\n" );
  12.        gets(nombre);
  13. printf("\nNombre en char: %s taille %d",nombre,strlen(nombre));
  14. return EXIT_SUCCESS;
  15. }
 

n°2039666
regexp42
Eplucheur de RFC.
Posté le 02-12-2010 à 15:09:44  profilanswer
 

Tu donnes quoi comme nombre ? Parce que là ton buffer ne fait que 5 octets... Avec 23243 c'est normal que ça ne fonctionne pas.


Message édité par regexp42 le 02-12-2010 à 15:10:24
n°2039667
aurel_gate​s
Posté le 02-12-2010 à 15:13:48  profilanswer
 

je donne un nombre différent à chaque fois... toute manière sa revient au même vu que c'est pareil avec n'importe quel mot/nombre! c'est indépendant du programme ! Comme je fais fais print strlen("chat" ), sa me renvoie également n'importe quoi! de plus, j'ai testé le programme sur le pc d'un pote qui a fedora, et sa marche !

n°2039668
aurel_gate​s
Posté le 02-12-2010 à 15:15:48  profilanswer
 

j'ai aussi testé en déclarant char* nombre ou char[200]...

n°2039671
xilebo
noone
Posté le 02-12-2010 à 15:20:53  profilanswer
 

ubuntu quelle version, que je teste ton code ?
 
 
Edit : sinon rentre dans la fonction strlen, pour voir ce qu'elle fait exactement ( et ou ça merde).
 
Ecris ta propre fonction strlen et compare la différence.


Message édité par xilebo le 02-12-2010 à 15:22:28
mood
Publicité
Posté le 02-12-2010 à 15:20:53  profilanswer
 

n°2039672
aurel_gate​s
Posté le 02-12-2010 à 15:26:35  profilanswer
 

c'est ubuntu 10.04 !  
a mon avis c'est un problème de bibliothèque propre a ubuntu, vu que sa marche sur le pc d'un pote ac fedora !  
merci d'avance !

n°2039676
xilebo
noone
Posté le 02-12-2010 à 15:34:10  profilanswer
 

je n'ai pas la 10.04 installée, mais avec la 10.10, aucun problème.  
 
Je ne pense pas que ce soit une erreur de la distribution ( bug trop flagrant pour passer). Surement un problème à l'installation ou un problème matériel qui crée un comportement indéterminé.
 
Le mieux est de tracer l'appel strlen pour voir comment il calcule la valeur de retour ( je ne sais pas si les sources sont installés par défaut, mais pas bien dur à installer ).
 
Par contre biginteger.h je ne sais pas ce que c'est, je l'ai viré, peut-être du code la dedans qui provoque l'erreur.

n°2039677
aurel_gate​s
Posté le 02-12-2010 à 15:39:33  profilanswer
 

arf desolé, biginterger.h c'est une bibliothèque que j'ai créé pour mon programme... j'ai oublié de l'enlever du main avant de poster !  
merci quand même je vais essayer une autre version alors et tester manuellement la fonction strlen !  
merci

n°2039687
smaragdus
whores, drugs & J.S. Bach
Posté le 02-12-2010 à 16:15:50  profilanswer
 

Ca serait pas un ubuntu 64bit par hasard ?
 
C'est évident qu'un bug comme ça, ubuntu ne pourrait même pas démarrer.
 
strlen ne renvoie pas un int mais un size_t donc essaie avec %ld ou caste vers un int
 
edit : non en y repensant, ça doit être %u en fait pour les entiers non signés


Message édité par smaragdus le 02-12-2010 à 16:18:24
n°2039692
theshockwa​ve
I work at a firm named Koslow
Posté le 02-12-2010 à 16:33:21  profilanswer
 

comme l'a dit regexp42, commence par agrandir ton buffer histoire de ne pas écrire n'importe où en mémoire.


---------------
last.fm
n°2040268
matafan
Posté le 06-12-2010 à 13:45:57  profilanswer
 

La fonction gets() ne doit jamais, jamais, absolument jamais être utilisée, puisqu'elle ne permet pas de s'assurer qu'on ne sortira pas du buffer pour aller jardiner dans la mémoire.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problème fonction strlen /ubuntu

 

Sujets relatifs
[JAVA] Probleme de generation de classes avec PowerAMC[Résolu] Probleme d'unicité dans un HashSet
Gros problème d'antislash et quoteProblème balise meta
Problème MACRO filtre auto passage v2007 - v2003[CSS] Problème avec .class et id
[Python 2.7]Py2exe - probleme de dépendancesProblème avec des listes à puces décalées.
[Java]Petit problème interface graphiqueProbleme URL Rewrite
Plus de sujets relatifs à : Problème fonction strlen /ubuntu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR