我对C ++很新(在Java中只是一个不稳定的背景)而且我很难知道如何打印出char数组的全部内容。我相信我需要使用一个循环,并将循环基于数组的长度,但我的编译尝试并没有成功。这就是我现在所拥有的。在此先感谢您的帮助!
#include <iostream>
#include <string>
using namespace std;
void namePrinting(char name[])
{
int i = 0;
cout << "Name: ";
while(i <= name.length() )
{
cout << name[i];
i++;
}
}
int main()
{
string fullName;
cout << "Enter name: ";
cin >> fullName;
char nameArray[fullName.length()];
namePrinting(nameArray);
}
答案 0 :(得分:20)
从简单的事情开始:
char c_array[3];
c_array[0] = 'a';
c_array[1] = 'b';
c_array[2] = 'c';
for(int i=0 ; i<3 ; ++i)
{
cout << c_array[i];
}
cout << endl;
在你完全理解之前不要走得更远。现在请注意,如果你对数组进行空终止,你可以将整个事件传递给cout
和{{1}会知道什么时候停止:
operator<<
对于大多数其他类型的数组,你不能这样做。现在注意你可以用这种方式分配char c_array[4];
c_array[0] = 'a';
c_array[1] = 'b';
c_array[2] = 'c';
c_array[3] = 0;
cout << c_array << endl;
,它将以空终止:
char[]
您甚至可以省略数组的大小,编译器会推断它:
char c_array[20] = "abc";
cout << c_array << endl;
有几种不同的方法可以将用户输入读入数组,但听起来好像你已经知道了,而且这个答案变得越来越长。
答案 1 :(得分:2)
使用operator<<(char)
单独编写每个字符效率低下。
使用std::string
构造函数转换为(const char*, size_t)
,并使用operator<<(const std::string&)
编写它也效率低下。
正确的方法是使用http://en.cppreference.com/w/cpp/io/basic_ostream/write
PS:请注意,您的代码无效C ++。 char name[]
基本上与char* name
同义,并且不知道它的长度(并且它上面也没有.length()
)。并且您的nameArray
未初始化。大小,是的;初始化,没有。您错过了std::copy
或strncpy
来电,将fullName
的内容复制到nameArray
。
答案 2 :(得分:1)
printf("%s", nameArray);
正常工作!
答案 3 :(得分:0)
对于我的问题,我的程序正在寻找命令行参数。由于我没有提供参数,因此它抛出std::logic_error what(): basic_string::_S_construct null not valid
我希望这可以使您对如何解决问题有所了解。
答案 4 :(得分:0)
这是一种通用的方法。
// write out any c style char array to an output stream
#include <iostream>
#include <string.h>
void write_char_array(std::ostream& os, const char* string) {
// faster than an ostream_iterator and std::copy
os.write(string, strlen(string));
}
int main()
{
const char question[] = "What is your name? ";
const char* answer = "Bob";
write_char_array(std::cout, question);
write_char_array(std::cout, answer);
}
输出:
What is your name? Bob