我这样做
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次=
,而是只显示一次=
符号。我的主要目的是尽可能多地返回=
或任何字符并输出
与文本文件相同。就是这样。
答案 0 :(得分:5)
cout<<*res_line;
正在打印一个字符,因为*res_line
是char
,而不是char*
。
写:
cout<<res_line;
但是等待 - 不将继续工作,因为res_line
不是以空值终止。
使用std::string
或std::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, '=');