Подтвердить что ты не робот

С++, передающий массив char для работы

Я предпочел бы просто использовать строку, но мы не должны, так как учитель ненавидит их и хочет, чтобы мы выяснили способы их избежать. Поэтому я изучил структуру, но мы не так далеко в книге, и она ненавидит ее, когда я прохожу вперед. Поэтому я думал об этом:

#include <iomanip>
#include <iostream>
#include <stdio.h>

using namespace std;

void myfunc(char& );

int main()
{
    char myname[12];
    cout<<"enter  a name ";
    cin>>myname;
    cout<<"myname is "<<myname;

    cout<<"myname is " << myfunc(myname);

    getchar();
    getchar();
    return 0;
}

void myfunc(char &myname1)
{
    myname1 = "Billy"
}

Но это не работает, и я не знаю почему.

4b9b3361

Ответ 1

Один из способов сделать это следующим образом:

void myfunc(char *myname1)
{
    strcpy(myname1,"Billy");
}   

Вам также нужно будет изменить основной объект:

myfunc(myname);
cout<<"myname is " << myname;

Однако вы должны быть осторожны, чтобы не переполнять свой начальный буфер.

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

Ответ 2

Эта строка кода неверна:

cout<<"myname is " << myfunc(myname);

myfunc() ничего не возвращает, его тип возврата void.

Попробуйте использовать:

char* myfunc(char *myname1)
{
    strcpy(myname1,"Billy");
    return myname;
}

или

myfunc(myname);
cout<<"myname is " << myname;

Ответ 3

Массивы передаются в указатели при передаче параметров.
Таким образом, простой способ, который вы хотите:

char* myfunc(char* myname1)
{
    return myname1;
}

Если вы собираетесь показать, вы можете передать массив по ссылке.
Но если вы не можете читать дальше, вы не сможете использовать это.

char* myfunc(char (&myname1)[12]) // Note you can only pass arrays of size 12
{                                // to this function so it is limited in use.
    return myname1;
}

Чтобы сделать его более полезным, хотя вы можете его создать:

template<int SIZE>
char* myfunc(char (&myname1)[SIZE])
{
    return myname1;
}

Ответ 4

myname1 = "Billy" не копирует строку, она копирует указатель на постоянную локальную память, содержащую "Billy"

Посмотрите на strncpy() или memcpy()

Ответ 5

Передайте его как char * вместо char &. Вы передаете ссылку на один символ вместо указателя на массив символов в этом коде.

Также используйте strncpy (google it), чтобы установить значение tr char *, когда вы находитесь в этой функции.

Ответ 6

void myfunc (char &); это проблема, которую она должна выполнить в char *, а не в качестве ссылки char, что вы сделали.

а в функции используйте strcpy (char * destination, char * source);