2013-12-24 3 views
0

Я использую gcc-компилятор на Linux Redhat. Я удивлен, почему разница в двух символах составляет a[5] и a[6] (майя и майанк), хотя их размеры отличаются только 1 байт.C Ограничение размера массива

char a[5]="Mayank"; 
char b[6]="Mayank"; 
char c[7]="Mayank"; 

printf("%s\n",a); 
printf("%s\n",b); 
printf("%s\n",c); 

Выход:

Maya 
Mayank 
Mayank 
+0

ли компилировать http://codepad.org/Wh4a56RA –

ответ

8

Первые два printf вызовы имеют undefined behaviour, так как ни a, ни b не включают в себя завершающий символ (c делает, так что последний printf() будет прекрасно само по себе).

+0

только первый неопределен 'символ б [6] =» Mayank ";' действителен в C (но бот в C++), то же, что и 'char b [6] = {'M', 'a', 'y', 'a', 'n', 'k' } '. –

+2

@GrijeshChauhan: Это? В «Майанке» есть семь символов, считая нуль. Массив слишком мал, чтобы удерживать их все. – cHao

+2

@GrijeshChauhan: Как так? Откуда берутся NUL, требуемые '% s'? – NPE

2
char a[5]="Mayank"; 

Вы заполняете массив из 5 элементов строкой, содержащей 7 элементов (7 символов).

"Mayank" содержит 6 charachters + нуль charachter ('\0') в конце строки

Так что это неопределенное поведение. Таким образом, вы получите случайный выход.

То же самое для

char b[6]="Mayank"; 

И это нормально для

char b[7]="Mayank"; 
+0

Неправда. Это не проблема. –

Смежные вопросы