2013-10-15 43 views
4

我对C++(在Java中只是一个不稳定的背景)颇为陌生,而且我非常难以打印出char数组的全部内容。我相信我需要使用一个循环,并将循环放在数组的长度上,但是我的编译尝试没有成功。这就是我现在所拥有的。在此先感谢您的帮助!使用cout打印字符数组的全部内容

#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); 
} 
+1

只需打印'std :: string'。 – chris

+0

不幸的是,该任务需要我使用char数组。 – Chandy

+0

什么任务?只需使用'cout << fullName;' – P0W

回答

15

开始用简单的东西:

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[]这样,这将是空值终止:

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

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

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

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

+0

谢谢,测试版,我会尝试。 – Chandy

+0

@Chandy近3年后,为什么没有被接受为正确的答案? – narengi

1

使用operator<<(char)分别写入每个字符效率不高。

使用(const char*, size_t)构造函数转换为std::string,使用operator<<(const std::string&)编写该函数也效率低下。

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

PS:请注意,你的代码是无效的C++。 char name[]基本上与char* name同义,不知道它的长度(也没有.length())。并且您的nameArray未初始化。大小,是的;初始化,没有。您遗漏了std::copystrncpy电话将fullName的内容复制到nameArray

0
printf("%s", nameArray); 

只是工作!