Bon alors je suis pas d’accord.
[quote name=‹ Moktar › date=’ 2 May 2005, 15:49’][code]struct MyStruct_
{
int a;
int b;
int c;
char pData[];
};
using namespace std;
int main(void)
{
MyStruct_ sValue;
// Taille de la structure compte-tenu d’un alignement sur 4 octets on devrait
// avoir au moins 16
cout << "size MyStruct_ == " << sizeof(MyStruct_) << endl;
// Taille de « l’instanciation » de la structure (on ne sait jamais)
// Même chiose que ci-dessus
cout << "size sValue == " << sizeof(sValue) << endl;
// Et pourtant j’ai accès au champ pData
// SAIMAL ici car je ne tape pas dans une zone allouée mais
/// c’est pour l’exemple.
sValue.pData[0] = ‹ 1 ›;
return( 0 );
}[/code][/quote]
Le code n’a de sens qu’en C++. En C, tu te touches. Avec « char pData[]; », gcc me dit:
sizeof.c:8: field `pData’ has incomplete type
Et ne link pas le merdier.
Le seul code qui compile, c’est ca:
[code]struct MyStruct
{
int a;
int b;
int c;
char *pData;
};
int main(void)
{
struct MyStruct sValue;
printf(« size MyStruct == %d\n »,sizeof(struct MyStruct));
printf("size sValue ==%d\n ",sizeof(sValue));
sValue.pData[0] = ‹ 1 ›;
return( 0 );
}[/code]
Etonnament, le code ne segfault pas mais il devrait (c’est juste du bol que pdata ne pointe pas sur une zone memoire reserve), et ca donne:
[quote]size MyStruct == 16
size sValue ==16[/quote]
Bref c’est crade ton truc, moktar
Teste sur:
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)
(Debian Woody a jour)
edit: En C et a ma connaissance, char foo[]; n’a pas de sens en lui meme, il n’a d’interet que pour definir des const string:
char foo[]=« Hello World »;
Quand, en C, on fait ca, ca marche super bien et en theorie, on a pas le droit de modifier la chaine, meme si rien en pratique nous l’interdit.
LoneWolf
Jamais vu du C avec un cout