我宁愿只使用一个字符串,但我们不应该因为老师讨厌它们而希望我们找出避免它们的方法。所以我考虑使用一个结构,但我们在书中并没有那么远,当我跳过时,她讨厌它。所以我想这样做:
#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"
}
但这不起作用,我不知道为什么。
答案 0 :(得分:10)
一种方法是这样做:
void myfunc(char *myname1)
{
strcpy(myname1,"Billy");
}
您还需要将主页更改为:
myfunc(myname);
cout<<"myname is " << myname;
但是你必须小心不要溢出你的初始缓冲区。
原始代码不起作用的原因是您无法将字符串分配给char
指针。相反,您必须将字符串复制到char*
。
答案 1 :(得分:5)
这行代码错误:
cout<<"myname is " << myfunc(myname);
myfunc()
不会返回任何内容,其返回类型为void
。
尝试使用:
char* myfunc(char *myname1)
{
strcpy(myname1,"Billy");
return myname;
}
或者
myfunc(myname);
cout<<"myname is " << myname;
答案 2 :(得分:2)
当作为参数传递时,数组转换为指针 所以你想要的简单方法是:
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;
}
答案 3 :(得分:0)
myname1 = "Billy"
不复制字符串,它将指针复制到包含“Billy”的常量本地内存
看一下strncpy()或memcpy()
答案 4 :(得分:0)
将其作为char *而不是char&amp ;.传递给它。您将在此代码中传递对单个字符的引用,而不是指向字符数组的指针。
一旦你进入函数,也可以使用strncpy(google it)来设置tr char *的值。
答案 5 :(得分:0)
void myfunc(char&amp;);是它应该在char *中使用的问题,而不是你所做的char引用。
并在函数中使用strcpy(char * destination,char * source);