Передача массива char в функцию

как передать массив символов в функцию.

декларации

char fromName[64];
char fromStreet[64];
char fromSuburb[64];
char fromCountry[64];

вызов функции

    Trans[i]->putAddress(fromName, fromStreet, fromSuburb, fromCountry);

прототип

void putAddress(char,char,char,char);

function    
void putAddress(char fName,char fStreet,char fSuburb,char fCountry){

        return;
}

и ошибок "главный.cpp", строка 86: ошибка: формальный аргумент 1 типа char в вызове Mail:: putAddress(char, char, char, char) передается char*.

9 ответов


ваша функция должна быть:

void putAddress(char *,char *,char *,char *);

вам нужно передать указатели на char

void putAddress(char* fName,char* fStreet,char* fSuburb,char* fCountry);

затем вам нужно быть осторожным, вы знаете размер каждого массива, чтобы вы не индексировали конец, в вашем случае все они 64.


void putAddress(char* array){
    //use array as usual
}

вы передаете строки (массивы символов) в качестве указателя на первый символ массива:

void something(char *str) { /* ... */ }

int main(int argc, char **argv) {
    char somestring[] = "Hell World!\n";

    something(somestring);

    return 0;
}

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

void putAddress(char*, char*, char*, char*);

компилятор говорит вам прямо там... Его передают как char*. Поэтому используйте либо char* или char ar[].


вы можете передать массив в 2 способами:

(1) обычный C-типа:
Здесь вы проходите по адресу и получаете с помощью указателя

void putAddress(char *,char *,char *,char *);

(2) C++ пройти по ссылке:
Вы передаете массив по ссылке со спецификацией размера:

 void putAddress(char (&a1)[64], char (&a2)[64],char (&a3)[64], char (&a4)[64]);

Это поможет вам получить размер массива сразу правильно (указатель не допускается). Это можно сделать более сложным, используя template также.

вы также можете повторить вариант использования std::string, который сделает копию всего массива и будет управлять им как автоматической переменной.


чтобы исправить ваш код:

void putAddress(char*,char*,char*,char*);

но это все равно неправильно. Массивы распадаются до указателей, поэтому он будет компилироваться, но приведет к ошибке, если аргументы не являются нулем. Вы также должны пройти в размере, если вы выбираете этот подход.

, так как это C++ , а не C, я предлагаю вам использовать std::string вместо:

void putAddress(const std::string&,const std::string&,const std::string&,const std::string&);

ошибка компилятора делает sence as fromName действительно указателем на (первый элемент) массива fromName. Это просто синтаксис C++ (и простой c).

чтобы передать массив символов функции, вы должны сделать то, что вы сейчас делаете, то есть передать указатель на (первый элемент) массива.

поэтому все, что вам нужно сделать, это изменить

    void putAddress(char,char,char,char);

to

    void putAddress(char *, char *, char *, char *);

PS: ваша следующая проблема-это знание (информирование putAddress о) длина каждого массива. Если они исправлены, у вас нет проблем.


void putAddress(char[],char[],char[],char[]);

function    
void putAddress(char fName[],char fStreet[],char fSuburb[],char fCountry[]){

        return;
}

вы забыли поставить paranthesis, поместите их, как в приведенном выше коде.