Problème fonction strlen /ubuntu

Problème fonction strlen /ubuntu - C - Programmation

Marsh Posté le 02-12-2010 à 10:12:35    

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 !  

Reply

Marsh Posté le 02-12-2010 à 10:12:35   

Reply

Marsh Posté le 02-12-2010 à 10:57:37    

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  

Reply

Marsh Posté le 02-12-2010 à 13:43:25    

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 !

Reply

Marsh Posté le 02-12-2010 à 13:54:24    

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

Reply

Marsh Posté le 02-12-2010 à 14:59:36    

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!

Reply

Marsh Posté le 02-12-2010 à 15:02:13    

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. }
 

Reply

Marsh Posté le 02-12-2010 à 15:09:44    

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
Reply

Marsh Posté le 02-12-2010 à 15:13:48    

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 !

Reply

Marsh Posté le 02-12-2010 à 15:15:48    

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

Reply

Marsh Posté le 02-12-2010 à 15:20:53    

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
Reply

Marsh Posté le 02-12-2010 à 15:20:53   

Reply

Marsh Posté le 02-12-2010 à 15:26:35    

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 !

Reply

Marsh Posté le 02-12-2010 à 15:34:10    

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.

Reply

Marsh Posté le 02-12-2010 à 15:39:33    

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

Reply

Marsh Posté le 02-12-2010 à 16:15:50    

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
Reply

Marsh Posté le 02-12-2010 à 16:33:21    

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


---------------
last.fm
Reply

Marsh Posté le 06-12-2010 à 13:45:57    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed