Ваша строка не оканчивается нулем, поэтому при ее печати она продолжает печатать символы после 8, выделенных вами в поисках, но до этого места в стеке не хватает. Вы также пишете на один символ больше, чем вы выделили, и ваши условия должны быть «объединены» с &&
- a ,
игнорирует результат первого выражения. Вам также следует избегать использования строковой переменной в качестве форматера строк для printf
.
Вот ваш код исправлено :
char array1[10] = "123456789";
char array2[9];
int i, j;
for(i = 1, j = 0 ; i < 10 && j < 9; i++, j++){
array2[j] = array1[i];
}
printf("%s\n", array2);
Вы также можете упростить цикл, используя единственную индексную переменную i
и индексируя array2
с помощью i+
. Вы также можете полностью удалить цикл, используя strncpy
, но помните, что если n
меньше длины строки + 1, это не добавит нулевой терминатор.