Прежде всего, массив words
располагается в памяти как
Hiii\0Hello
Кроме того, поскольку cp
является указателем на char
, выражение cp++
увеличивает cp
точно на байт. Это вы печатаете "Hiii"
, затем "iii"
, затем "ii"
и "i"
. Для правильности cp++
следует изменить на cp += 5
.
Наконец, массив имеет неправильный размер. Длина "Hiii"
равна 5
, а длина "Hello"
равна 6
, поскольку в конце каждой строки имеется неявный нулевой терминатор \0
. Таким образом, words
должен быть объявлен как char words[][6]={"Hiii","Hello"};
. Это также означает, что cp
теперь должно увеличиваться на 6
каждый раз.
С внесенными исправлениями петля for
становится
for(cp=p;cp<(p+size);cp+=6)
printf("%s ",cp);
Чтобы упростить вам жизнь, поскольку вы работаете с массивом, вы можете использовать индексы, а не полагаться на арифметику указателей:
int strCount = size / 6; // since each element of words is 6 characters long
for(int i = 0; i < strCount; i++)
printf("%s ", cp);