Вот мой кодстрока длиннее, чем ожидалось в C
#include <stdio.h>
#include <string.h>
int main(){
char pal[8] = "ciaooaic";
char pal1[7] = "ciaoaic";
int lenPal = strlen(pal);
int lenPal1 = strlen(pal1);
printf("strlen('%s'): %d\n", pal, lenPal);
printf("strlen('%s'): %d\n", pal1, lenPal1);
return 0;
}
Проблема заключается в том, что, когда я запускаю этот код выход:
strlen('[email protected]'): 11
strlen('ciaoaic'): 7
Первая строка имеет также другой непечатаемую полукокса между P и @. Я ноб, поэтому, возможно, я пропустил что-то очевидное. Кто-нибудь может мне помочь?
редактировать:
просто дать одно дополнительное место, как символ приятелем [9] = "ciaooaic"; char pal1 [8] = "ciaoaic";
Это работает, но почему? Я понимаю, что должно быть место для \ 0, но «ciaoaic» работает без него ...
просто дать одно дополнительное места, как 'полукокса дружка [9] =«ciaooaic»; char pal1 [8] = "ciaoaic"; ' – ncm
Потому что из-за неопределенного поведения ваш код может выдавать какой-либо результат (_even correct output_). – ameyCU
Когда вы инициализируете строки, например.'char pal [] =" ciaooaic "; компилятор будет включать в себя нуль-терминатор в конце (примечание:' '\ 0'' и' 0' эквивалентны. Когда вы указываете размер, например. 'pal [8]', вы ограничиваете размер массива только этим размером. Если вы случайно заполняете их символами и не оставляете места для нуля, компилятор счастлив, потому что он доверяет вам, что вы имели в виду. Если по случайности, следующий символ, следующий за «char pal [8] =« ciaooaic »;' в памяти - '0', тогда у вас случайно есть строка с завершающим нулем. Не рассчитывайте на то, что регулярно происходит ... –