Здесь много проблем.
Вы определили skey
как массив указателей. То, что вы хотите, это массив символов:
char skey[5];
Тогда при вызове функции:
givetome(&skey[5]);
Вы передаете адрес элемента массива с индексом 5. Самый большой индекс в массиве размера 5 равен 4, поэтому вы передаете указатель на единицу за концом массива. Вы хотите передать массив по имени, который передает адрес первого элемента.
givetome(skey);
Затем, поскольку мы переопределили skey
, нам нужно изменить givetome
, чтобы принять char *
. Затем при назначении присваивайте skey[i]
, а не *skey[i]
.
У вас также будут проблемы с печатью, поскольку %s
ожидает строку, которая определяется как массив символов с нулевым символом в конце. Массив не содержит нулевого байта, поэтому печать будет считываться за концом массива. Поэтому добавьте нулевой байт в конец f
и оставьте место для него в skey
.
Со всеми изменениями код должен выглядеть следующим образом.
#include <stdio.h>
void givetome(char *skey);
int main(int argc, const char * argv[]) {
char skey[6];
givetome(skey);
printf("%s\n", skey);
return 0;
}
void givetome(char *skey){
char f[6]={'g','h','f','d','s', '\0'};
for (int i=0; i<6; i++) {
skey[i]=f[i];
}
}