Работа с массивом символов
void k(char s[]){
// s[0]='1';
cout<<s;
}
char*c1="-1-2-3";
k(c1);
//char a[]=c1; error
Почему при передаче указателя в функцию получается им инициализировать массив, а внутри мейна так уже не выходит, ведь делаем такое же присваивание?
Ответы (1 шт):
Статический массив в Си/Си++ имеет определённые особенности. Он не может иметь неопределённого размера. У него нет функции копирования и как следствие передаётся в функцию только указатель на этот массив.
Синтаксис void k(char s[]) тихо компилятором заменяется на указатель void k(char * s).
Ошибка присваивания у вас char a[]=c1; во первых в том, что вы массиву с неопределёнными размерами присваиваете указатель, а во вторых как я и говорил, у него нет функции копирования. Копирование надо делать функцией strncpy или простым циклом если тип не char и не забывать выставлять нужный размер.
strncpy ( a , c1 , 12 ) ;
или
char a [ 12 ] ;
int i = 0 ;
do {
a [ i ] = c1 [ i ] ;
++ i ;
} while ( i < 12 and c1 [ i - 1 ] != '\00' ) ;