[C++ Managé Managed] : String->Length vers int : incohérence valeurs

: String->Length vers int : incohérence valeurs [C++ Managé Managed] - C++ - Programmation

Marsh Posté le 20-04-2006 à 14:59:49    

Bonjour à tous.
Je viens de remarquer un truc pour le moins étrange.
Dans un projet c++ managé, j'ai les instructions suivantes :

Code :
  1. String* s = new String(bufData); // Ok, j'ai une string s qui va bien
  2. int longueur = s->Length // s->Length "m'affiche" bien la longueur de s (en débug avec espion).


 
Par contre, à ce stade, la variable "longueur" prend systématiquement la valeur "1025", qq soit la s->Length.
 
Qqun aurait'il une explication à ce sujet ??
C'est d'autant plus étrange qu'il n'y a pas de cast "apparent", Length renvoyant un int !?

Message cité 1 fois
Message édité par Sagoth le 20-04-2006 à 15:01:05
Reply

Marsh Posté le 20-04-2006 à 14:59:49   

Reply

Marsh Posté le 20-04-2006 à 15:15:10    

Sagoth a écrit :

Bonjour à tous.
Je viens de remarquer un truc pour le moins étrange.
Dans un projet c++ managé, j'ai les instructions suivantes :

Code :
  1. String* s = new String(bufData); // Ok, j'ai une string s qui va bien
  2. int longueur = s->Length // s->Length "m'affiche" bien la longueur de s (en débug avec espion).


 
Par contre, à ce stade, la variable "longueur" prend systématiquement la valeur "1025", qq soit la s->Length.
 
Qqun aurait'il une explication à ce sujet ??
C'est d'autant plus étrange qu'il n'y a pas de cast "apparent", Length renvoyant un int !?


 
Pour éviter toute pollution, tu devrais essayer avec :

Code :
  1. String* s = new String("toto" );


Après-tout, on ne sait pas ce que contient "bufData"...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 20-04-2006 à 15:41:06    

Oui, avec une chaine "en dur" comme ton exemple, ca marche.
 
En fait il me renvoie la taille de mon bufData déclaré (et non la taille des données dans celui ci), une sorte de sizeOf.
 
Si l'on admet qu'il me renvoit cette espece de sizeOf et non la "longueur", il est quand meme étonnant que l'espion m'indique une longueur correcte et que la sauvegartde de cette longueur correcte dans un int se transforme en un sizeOf de mon bufData :O
 
Soit c'est l'espion du debugger qui a du mal, soit c'est encore un truc tordu du managé.
 
PS: pour info mon buf data est défini et instancié de la sorte :

Code :
  1. System::Char  bufData[];    // dans le .h
  2. __gc new System::Char[1024+1];  // instancié.


 
 
 

Reply

Marsh Posté le 20-04-2006 à 18:53:32    

Sagoth a écrit :

Oui, avec une chaine "en dur" comme ton exemple, ca marche.
 
En fait il me renvoie la taille de mon bufData déclaré (et non la taille des données dans celui ci), une sorte de sizeOf.


Ou alors "bufData" contient 1025 caractères non nul et le caractère suivant (qui n'appartient plus à "bufData" mais qui est le suivant dans la mémoire) contient un "\0" d'où le 1025 que tu reçois dans "longueur"
 

Sagoth a écrit :

Soit c'est l'espion du debugger qui a du mal, soit c'est encore un truc tordu du managé.


Essaye un bête printf("%d\n", strlen(bufData))...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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