簡體   English   中英

打印一行2d char數組(C ++)

[英]Printing a row of 2d char array (C++)

所以我聲明了一個2d數組,想一一顯示它的行,但是當我執行以下代碼時,我看到矩陣中的所有行都從我需要的行開始。

碼:

#include<iostream.h>
#include<conio.h>
#include<stdio.h>

char topics[3][10]={"Literature","Science---","Sports----"};

void main()
{
    clrscr();
    cout<<topics[0][0]<<endl<<topics[1][0]<<endl<<topics[2][0]<<endl;
    puts(topics[0]);
    cout<<endl;
    puts(topics[1]);
    getch();
}

輸出:

L    
S   
S   
LiteratureScience---Sports----         
Science---Sports----

我要我的程序做的是,當執行puts(0)時,僅應顯示“ Literature”,而當執行puts(1)時,僅顯示“ Science ---”。

我是初學者。 請提出我應該做哪些更正。謝謝。 :)

聲明:

char topics[3][10]={"Literature","Science---","Sports----"};

被編譯器視為:

char topics[3][10]={"Literature\0","Science---\0","Sports----\0"};

這意味着這些字符串中的每個字符串都包含11個字符。

因此,您需要將topics[3][10]更改為topics[3][11]

問題是C中的字符串以\\0終止。 因此,您需要11字符來存儲長度為10的字符串。如果使數組太小,則會跳過最后一個字符(請參見為什么“字符數組的初始化程序字符串太長”在C中不能很好地編譯,而在C ++中則不能? )。 因此puts在字符串末尾找不到\\0 ,而是轉到數組末尾,因為(幸運的是)數組后的內存包含零。 如評論所述,可以將其固定為正確的數組大小

#include <stdio.h>

char topics[3][11]={"Literature","Science---","Sports----"};

int main()
{
    puts(topics[0]);
    puts(topics[1]);
}

輸出是

Literature
Science---

C ++編譯器不會接受您的程序:

3:59: error: initializer-string for array of chars is too long [-fpermissive]
3:59: error: initializer-string for array of chars is too long [-fpermissive]
3:59: error: initializer-string for array of chars is too long [-fpermissive]

走開。

您無需明確提及該數組的維數。 編譯器完成這項工作。

const char *topics[] = {"Literature", "Science---", "Sports----"};

int main() {
    puts(topics[0]);
    puts(topics[1]);
}

請注意,以這種方式,這些字符串是只讀的

暫無
暫無

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

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