2010-12-04 4 views
1

Pourquoi est sortie de ce codestruct avec plusieurs tableaux char problème

1234567890asdfg 
asdfg 

(je ne peux pas utiliser la classe string)

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

struct S 
{ 
char a[10]; 
char b[20]; 
}; 

int main() 
{ 
struct S* test = (S*)malloc(sizeof(S)); 

strcpy(test->a, "1234567890"); 
strcpy(test->b, "asdfg"); 

printf("%s\n%s", test->a, test->b); 

return 0; 
} 
+1

Vous avez étiqueté votre question comme C, mais compiliez-vous réellement cela avec un compilateur C++? Vous mentionnez la classe de chaînes, et votre structure devrait être appelée 'struct ', et pas seulement' S', dans C. – Cascabel

+0

Yeah iam using MVC++. Merci d'avertir à ce sujet. – Husenica

Répondre

6

La chaîne que vous avez placée dans test->a comporte onze caractères, y compris le caractère nul de fin: 1234567890\0. Lorsque vous le copiez dans a, ce caractère null finit dans le premier caractère de b. Vous pouvez ensuite le remplacer par la chaîne de copier dans b, de sorte que la mémoire vous avez:

a - - - - - - - - - b - - - - - - - - - - - - - - - - - - - 
1 2 3 4 5 6 7 8 9 0 a s d f g \0 
        ^
        | 
     a's terminating null was here. 

Vous pouvez ensuite imprimer a (à partir du '1') et b (à partir du 'a'), la production de cette sortie.

+0

Bonne réponse. +1 de moi. –

2

La chaîne "1234567890" a besoin en fait 11 octets (char s).

Pour que vous remplaciez le premier caractère de b.