[英]Why can't I convert 'char**' to a 'const char* const*' in C?
[英]Why can't I initialize a "const char chars [ 5 ] [ 10 ]" array with "*"-s ( stars ) in C?
為什么會這樣:
const char chars [ 2 ] [ 10 ] = {
{ "*", "*", "*", "*", "*", "*", "*", "*", "*", "*" },
{ "*", "*", "*", "*", "*", "*", "*", "*", "*", "*" }
};
for ( int i = 0; i < 2; ++i ) {
for ( int j = 0; j < 10; ++j ) {
printf ( chars [ i ] [ j ] );
if ( j != 9 )
printf ( " " );
給這個:
c.c: In function ‘main’:
c.c:27:10: error: excess elements in char array initializer
27 | { "*", "*", "*", "*", "*", "*", "*", "*", "*", "*" },
| ^~~
c.c:27:10: note: (near initialization for ‘chars[0]’)
與“0”、“1”而不是“*”相同,但 const char* [ 2 ] [ 10 ] 有效嗎?
char chars[2][10]
是一個 arrays 字符數組。 這個二維數組中的每個字符都可以用一個字符初始化,或者每個字符子數組都可以用一個字符串初始化。 您正在嘗試使用不起作用的字符串初始化每個字符。 嘗試:
const char chars[2][10] = {
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' }
};
或者
const char chars[2][10] = { "**********", "**********" };
您需要小心,因為這些 char 子數組不是有效的字符串——它們缺少 NUL 終止符。 所以你不能把它們當作字符串。
另請注意,要打印char
,您需要printf("%c", chars[i][j]);
或putchar(chars[i][j]);
您的代碼中存在不止一個問題。 首先,在C
中,雙引號表示字符串,但您想用char
進行初始化,其中應該使用單引號。 除此之外,您的代碼中還缺少一些括號。
當您想使用printf
打印printf
中的一些變量時,在C
內,您必須指定要打印的數據類型%c
在這種情況下, char
是哪個說明符)。
我假設你想這樣做:
#include <stdio.h>
const char chars [ 2 ] [ 10 ] = {
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' }
};
int main () {
for ( int i = 0; i < 2; ++i ) {
for ( int j = 0; j < 10; ++j ) {
printf ("%c", chars [ i ] [ j ] );
if ( j != 9 )
printf ( " " );
}
printf("\n");
}
}
有兩個錯誤:
'c'
或"string"
。%c
格式通過printf()
打印 char 值。#include <stdio.h>
int main()
{
const char chars [ 2 ] [ 10 ] = { { "**********" }, { "**********" } };
for ( int i = 0; i < 2; ++i )
{
for ( int j = 0; j < 10; ++j )
{
printf ("%c", chars [ i ] [ j ] );
if ( j != 9 )
printf (" ");
else
printf("\n");
}
}
return 0;
}
您必須使用單引號而不是雙引號。 雙引號表示以空字符結尾的字符串,而單引號是單字符。 因此,雙引號內的單個字符實際上是 2 個字節,因為它會自動在末尾添加一個 null 終止符(二進制零)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.