Работа с массивом символов

Рейтинг: 0Ответов: 1Опубликовано: 04.04.2023
void k(char s[]){
   // s[0]='1';
   cout<<s;
}

char*c1="-1-2-3";
k(c1);
//char a[]=c1; error

Почему при передаче указателя в функцию получается им инициализировать массив, а внутри мейна так уже не выходит, ведь делаем такое же присваивание?

Ответы

▲ 2Принят

Статический массив в Си/Си++ имеет определённые особенности. Он не может иметь неопределённого размера. У него нет функции копирования и как следствие передаётся в функцию только указатель на этот массив.

Синтаксис 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' ) ;