C ++将char数组传递给函数

时间:2011-11-07 02:36:58

标签: c++

我宁愿只使用一个字符串,但我们不应该因为老师讨厌它们而希望我们找出避免它们的方法。所以我考虑使用一个结构,但我们在书中并没有那么远,当我跳过时,她讨厌它。所以我想这样做:

#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"
}

但这不起作用,我不知道为什么。

6 个答案:

答案 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);