[英]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.