C++将char数组传递给函数
我宁愿只使用一个字符串,但我们不应该像老师讨厌他们一样,并希望我们找出避免它们的方法。所以我研究了一个结构,但是我们并没有在书中那么深入,当我跳过时,她讨厌它。所以我想这样做:C++将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"
}
但这不起作用,我不知道为什么。
一种方式是像这样做:
void myfunc(char *myname1)
{
strcpy(myname1,"Billy");
}
你还需要改变你的主要以:
myfunc(myname);
cout<<"myname is " << myname;
但是你必须要小心,不要溢出的初始缓冲。
你原来的代码不工作的原因是你不能指定字符串指向char
指针。相反,您必须将该字符串复制到char*
。
OP说明他不能使用字符串 –
修正,删除最后一句。 – Mysticial
当作为参数传递时,数组将转入指针。
所以要简单的方法就是:
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;
}
myname1 = "Billy"
不会复制一个字符串,它拷贝一个指向包含“比利”
采取固定本地内存看看strncpy()或memcpy()
将它作为char *而不是char &传递。您传递的是对单个字符的引用,而不是此代码中指向字符数组的指针。
同样使用strncpy(谷歌它)来设置tr char *的值,一旦你在函数中。
void myfunc(char &);是它应该在char *中引入的问题,而不是你所做的char引用。
并在函数中使用strcpy(char * destination,char * source);
这行代码是错误的:
cout<<"myname is " << myfunc(myname);
myfunc()
不返回任何东西,它的返回类型是void
。
尝试使用:
char* myfunc(char *myname1)
{
strcpy(myname1,"Billy");
return myname;
}
或者
myfunc(myname);
cout<<"myname is " << myname;
避免'的std :: string'是,除了作为一个学习锻炼(甚至当时的)简直是愚蠢的。它是标准库的一部分,它旨在替换裸指针,并消除与它们相关的大部分问题。你的老师听起来像一个C瘾君子,他希望你用C++编写C代码。 – cHao