C++传递字符数组给函数

21

我更愿意只使用一个字符串,但我们不应该这样做,因为老师讨厌它们,并希望我们想出避免使用字符串的方法。所以我尝试了使用结构体,但我们还没有学到那一部分,而且如果我提前学习,她会很生气。所以我在考虑这样做:

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

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


2
避免使用std::string并不是愚蠢的行为。有很多情况下,人们会希望使用固定大小的字符数组,特别是在处理像微控制器或物联网设备这样的有限内存时。 - OpticalMagician
6个回答

12

有一种方法是这样做:

void myfunc(char *myname1)
{
    strcpy(myname1,"Billy");
}   
你还需要更改你的主要函数:
myfunc(myname);
cout<<"myname is " << myname;

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

你原来的代码之所以不能工作,是因为你不能将字符串赋给 char 指针。相反,你必须将字符串复制到 char* 中。


7

这行代码是错误的:

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

myfunc()不返回任何内容,其返回类型为void

尝试使用:

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

或者

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

5
当数组作为参数传递时,它们会转换成指针。
因此,您所需要的简单方法是:
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;
}

0

myname1 = "Billy" 不是复制字符串,而是复制指向包含"Billy"的常量本地内存的指针

可以看一下strncpy()或memcpy()


0
将其作为char*传递而不是char&。在此代码中,您正在传递对单个字符的引用,而不是对字符数组的指针。
此外,一旦进入函数,请使用strncpy(谷歌它)设置tr char*的值。

0

void myfunc(char&)是问题,它应该接受char*而不是char引用,这就是您所做的。

在函数中使用strcpy(char * destination, char *source);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接