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

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

+5

避免'的std :: string'是,除了作为一个学习锻炼(甚至当时的)简直是愚蠢的。它是标准库的一部分,它旨在替换裸指针,并消除与它们相关的大部分问题。你的老师听起来像一个C瘾君子,他希望你用C++编写C代码。 – cHao

一种方式是像这样做:

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

你还需要改变你的主要以:

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

但是你必须要小心,不要溢出的初始缓冲。

你原来的代码不工作的原因是你不能指定字符串指向char指针。相反,您必须将该字符串复制到char*

+0

OP说明他不能使用字符串 –

+1

修正,删除最后一句。 – 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;