从c ++中的char函数返回一个char数组

时间:2014-08-04 17:49:39

标签: c++ arrays string

我这样做

char *draw_line(int n, char ch)
{
    char *line = new char[50];
    for(int i = 0; i <= n; i++)
        line[i] = ch;
    return line;
}

在调用函数时我正在写这个:

char *res_line = draw_line(50, '=');
cout<<*res_line;

但不是在控制台窗口中打印50次=,而是只显示一次=符号。我的主要目的是尽可能多地返回=或任何字符并输出 与文本文件相同。就是这样。

3 个答案:

答案 0 :(得分:5)

cout<<*res_line;

正在打印一个字符,因为*res_linechar,而不是char*

写:

cout<<res_line; 

但是等待 - 将继续工作,因为res_line不是以空值终止。

使用std::stringstd::vector<char> - 避免显式内存分配,请改用RAII惯用法:

std::string draw_line(int n, char ch)
{
    return {n, ch}; //C++11
}

这么简单!

或者如果您使用std::vector

std::vector<char> draw_line(int n, char ch)
{
    return {n, ch}; //C++11
}

几乎相同。

但是,在C ++ 03中,您可以写:

return std::string(n, ch);        //in the first case
return std::vector<char>(n, ch);  //in the second case

即,显式调用构造函数。

答案 1 :(得分:2)

有效代码将显示为

char* draw_line( int n, char ch )
{
    char *ch2= new char[n + 1]();

    std::memset( ch2, ch, n );

    return ch2;
}

//...

char *ch50 = draw_line(50,'=');
cout << ch50;
//...
delete []ch50;    

考虑这个陈述

char *ch2= new char[n + 1]();

但是简单地写

会好得多
std::cout << std::string( 50, '=' );

答案 2 :(得分:1)

char* draw_line(int n, char ch)
{
    char *ch2= (char *) malloc(sizeof(char)*(n+1)); // (n+1) here
    for(int i=0;i<n;i++) // < instead of <=
        ch2[i]=ch;
    ch2[n] = 0; // terminator
    return ch2;
}

char *ch50 = draw_line(50,'=');
cout<< ch50; // changed from *ch50 to ch50

ADDON :查看string-fill constructor

cout << string(50, '=');