2012-05-19 5 views
0

Quelqu'un peut-il s'il vous plaît me expliquer pourquoi il est impossible de mettre un caractère '\0' dans le tableau donné:initialisation Array en C

char a[]={'r','b'}; 

a[2]='\0'; 

ne devrait pas le code ci-dessus mettre un caractère nul à la troisième fente et par conséquent convertir le tableau de caractères a à une chaîne de caractères.

+0

Vous pouvez prendre 'char a [3] = {'r', 'b'}' 'et vous avez suffisamment de mémoire pour mettre un [2]. – user411313

+0

John Nash posant une telle question de base? naaaahhhh .. /) –

+0

Encore en train d'apprendre C. –

Répondre

8

Vous écrivez au-delà de la limite de tableau: lorsque vous initialisez un tableau avec deux caractères, le dernier index valide est 1, et non 2.

Vous devez initialiser votre tableau avec trois éléments, comme suit:

char a[] = {'r', 'b', '\0'}; 

Vous pouvez aussi bien utiliser cette version:

char a[] = "rb"; 

Cela vous donnera un tableau inscriptible avec un zéro chaîne -terminated à l'intérieur.

+0

Oui, cela a du sens. Merci pour la réponse rapide. –

+0

Depuis que je suis nouveau à cela, pouvez-vous m'aider à localiser le bouton Accepter. Merci. –

+0

@JohnNash Il y a un aperçu de la coche à côté de la réponse. – dasblinkenlight

1

Les chaînes dans C sont implémentées comme un tableau de caractères et se terminent par un '\ 0' nul. Dites simplement char* a = "rb";. (N'oubliez pas d'inclure string.h)

0

Bien que la réponse de TeoUltimus soit correcte, notez que le pointeur 'a' dans son cas pointe vers une chaîne littérale. Cela signifie que vous ne pouvez jamais modifier la chaîne. Plus spécifiquement, alors que le code a[1] = 'c'; sera compilé, son exécution entraînera une erreur. Ecrivez char a[] = "ab" si vous souhaitez que les éléments individuels de la chaîne soient modifiés. Pour plus de détails, voir: https://www.securecoding.cert.org/confluence/display/seccode/STR30-C.+Do+not+attempt+to+modify+string+literals

+0

Merci, cela a certainement aidé! –