Ваш код демонстрирует одно из очень тонких различий в C
между массивом и указателем. Строка:
char *A = "This is a destination sentence";
объявляет A
как указатель на символ (строку), а затем инициализирует этот указатель на адрес строкового литерала . Этот строковый литерал имеет значение константа , и компилятору разрешено размещать его в области памяти, доступной только для чтения . Затем, когда вы передаете эту память функции ft_strncpy
( через ее адрес), вы пытаетесь изменить эту постоянную память.
Если вместо этого вы используете следующее :
char A[] = "This is a destination sentence";
затем вы объявляете A
как массив символов и инициализируете этот массив данными из строкового литерала. Таким образом, компилятор теперь знает, что массив является модифицируемым (вы не включили квалификатор const
), и поместит этот массив в память, которую можно прочитать из записанных и к.