C ++ - Как поместить целый массив символов в указатель? - PullRequest
0 голосов
/ 02 февраля 2020

Я новичок (и не нашел ответа по номеру rnet). Я получил указатель и массив char и хочу сохранить весь Array, а не только первый элемент, в указателе, чтобы передать его функции (также мне не разрешено изменять параметры функции).

char Feld[ ] = {1,2,3}          
char *pointer = NULL;
pointer = ???

функция:

void strncat(char *s)
{...}

Функция вызова:

strncat(???)

Спасибо за вашу помощь

Ответы [ 2 ]

2 голосов
/ 02 февраля 2020

Если функция объявлена ​​следующим образом

void strncat(char *s);

, то это означает, что функция не знает размер массива, на который указывает указатель s. Таким образом, кажется, что функция имеет дело со строкой: последовательность символов, оканчивающаяся нулевым символом.

С другой стороны, использование буквы 'n' в имени функции strncat означает, что функция должна иметь еще один параметр, который определяет длину используемого массива символов.

Таким образом, либо функция объявлена ​​неправильно, либо ее следует переименовать, например,

void strcat(char *s);

Или лучше объявить ее как

char * strcat(char *s);

Следовательно, это объявление массива символов

char Feld[ ] = {1,2,3}; 

нельзя использовать в функции, поскольку массив не содержит строку и его длина не передается функции .

Вы должны объявить массив, например, как

char Feld[ ] = { '1','2','3', '\0' }; 

или как

char Feld[ ] = "123"; // or { "123" } 

Указатели не сохраняют информацию, указывают ли они на один объект или первый элемент массива.

Так что, если функция объявлена, как показано выше, то вы должны просто написать

char *p = Feld; 
strcat( p );

или без использования промежуточного указатель указывался как

strcat( Feld );

Внутри функции длина строки будет определяться количеством символов перед завершающим нулем '\0'.

0 голосов
/ 02 февраля 2020

Feld - указатель на первый элемент массива. Таким образом, вы можете передать strncat(Feld). Если вы хотите, вы также можете сделать char* pointer = Feld; и strncat(pointer), но это действительно не нужно. Затем вы можете получить доступ к другим элементам с помощью s[0],s[1],s[2]. Как отметил @Vlad, вы не можете назначать целые числа массиву символов, а нужно сделать char Feld[ ] = {'1','2','3'}

...