簡體   English   中英

使用cout打印字符數組的全部內容

[英]Using cout to print the entire contents of a character array

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

從簡單的事情開始:

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[] ,並且它將以null結尾:

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

您甚至可以省略數組的大小,編譯器會推斷它:

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

有幾種不同的方法可以將用戶輸入讀入數組,但聽起來好像你已經知道了,這個答案變得越來越長。

使用operator<<(char)單獨編寫每個字符效率很低。

使用(const char*, size_t)構造(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

printf("%s", nameArray);

只是工作!

對於我的問題,我的程序正在尋找命令行參數。 因為我沒有提供參數,所以在拋出一個std::logic_error what(): basic_string::_S_construct null not valid實例后拋出終止調用std::logic_error what(): basic_string::_S_construct null not valid

我希望這能讓您對如何解決問題有所了解。

這是一種通用的方法。

運行示例

// 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM