15

我对 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);
}
4

5 回答 5

30

从简单的事情开始:

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,并且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[]这种方式分配 a,它将以空值结尾:

char c_array[20] = "abc";
cout << c_array << endl;

你甚至可以省略数组的大小,编译器会推断它:

char c_array[] = "abc";    // this is a char[4];
cout << c_array << endl;

有几种不同的方法可以将用户输入读取到数组中,但听起来好像您已经知道了,而且这个答案越来越长。

于 2013-10-15T02:38:54.093 回答
4

单独使用每个字符编写operator<<(char)效率低下。

转换为std::stringusing(const char*, size_t)构造函数,并编写 usingoperator<<(const std::string&)也是低效的。

正确的方法是简单地使用http://en.cppreference.com/w/cpp/io/basic_ostream/write

PS:请注意,您的代码不是有效的 C++。char name[]基本上是同义词char* name并且不知道它的长度(也没有.length()它)。而且你nameArray的没有初始化。大小,是的;初始化,没有。您缺少一个std::copystrncpy调用来复制fullNameinto的内容nameArray

于 2016-08-03T08:54:10.803 回答
2
printf("%s", nameArray);

只是工作!

于 2016-08-08T22:51:09.323 回答
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
于 2019-04-14T20:55:15.590 回答
0

对于我的问题,我的程序正在寻找命令行参数。由于我没有提供参数,所以它在抛出一个实例后抛出终止调用std::logic_error what(): basic_string::_S_construct null not valid

我希望这能让您对如何解决您的问题有所了解。

于 2019-01-22T00:47:20.847 回答