С++, передающий массив 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"
}
Но это не работает, и я не знаю почему.
Ответы
Ответ 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);