2013-08-01 52 views
-2

在C++中,我試圖創建字符串數組。同時,我想訪問字符並改變它們像這樣:C++字符串數組和訪問字符

#include<iostream> 

using namespace std; 

int main(){ 
    int n; 
    cin >> n; 
    char lines[4][n+1]; 
    int color = 0; 
    for(int a = 0; a < n; a++){ 
     for(int i = 0; i < 4; i++){ 
      lines[i][a] = (char) (color % 25 + 97); 
      if(i == 1 || i == 3){ 
       color++; 
      } 
     } 
    } 
    cout << lines[0] << endl << lines[1] << endl << lines[2] << endl << lines[3]; 
    return 0; 
} 

時,我想它打印所有的「行[I]」似乎有一些未知字符。

預期:

交流勵磁發電機

交流勵磁發電機

bdfh

bdfh

輸出:(http://i.stack.imgur.com/SR4Y4.png

aceg'aceg■bdfh

交流勵磁發電機■bdfh

bdfh

bdfh

你知道原因嗎? (我檢查了我的整個代碼多次,它導致我不知道我認爲的字符數組陣列)

有沒有其他方法可以做到這一點? (如果可能的話沒有用C喜歡它的庫)

編輯

我說我所有的代碼此消息。

+0

您需要了解「想要打印」的內容。 –

+1

字符串以null結尾... –

+0

歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。請說明如何打印陣列。除非你做了一些你沒有看到的東西,把它們打印出來就好像它們是字符串一樣,會顯示出你看到的那種行爲。既然你不顯示任何代碼改變'顏色',你應該在每個單元格中獲得相同的值(''a'')。當你忽略代碼的關鍵部分時,人們會感到沮喪 - 缺少代碼時很難幫助你。請閱讀如何創建SSCCE([簡短,獨立,正確的示例](http://sscce.org/))。 'n'的價值是什麼? –

回答

2

我不能沒有確切地看到你是如何打印是肯定的,但如果你只是通過印刷類似printf("%s\n", lines[i]);,然後你的問題是因爲你忘記了null-終止你的字符串。

確保你做這樣的事情

for (int i = 0; i < 4; i++) { 
    lines[i][n] = '\0'; 
} 
+0

赦免,我想如果你使用的是C++,那麼'std :: cout << lines [i];' –

+0

這可能是對的,因爲OP在她的代碼中有明顯的數組大小'n + 1'... –

+0

那麼,如果'lines [0] [n]'和'lines [1] [n]'是可能的,那麼OP的輸出是不是null,但是'lines [3] [n]'和'lines [4] [n]'*是*。 –

0

正常工作對我來說:

#include <stdio.h> 

for(int i = 0; i != 4; ++i) 
{ 
    fwrite(lines[i], 1, n, stdout); 
    fputc('\n', stdout); 
} 

或者在C++:

#include <iostream> 
#include <string> 

for(int i = 0; i != 4; ++i) 
{ 
    std::cout << std::string(lines[i], n) << '\n'; 
} 
+1

雖然這可能是真的,但如果OP的問題是他不是以相同的方式打印呢?這不會幫助OP理解他爲什麼看到他所做的行爲。 –

+0

@DennisMeng:通過一切手段發佈一個解釋OP的問題的答案:-) –

0
aceg'aceg■bdfh 

aceg■bdfh 

bdfh 

bdfh 

看你輸出的話可以找:

line[0] in fact print line[0] & line [1] & line[2]. 
line[1] in fact print line[1] & line [2]. 

這意味着你「字符串」沒有合適的停車標誌。

使用line[i][n] = '\0'char[i][4] = '\0'如果你只存儲4個字符。