簡體   English   中英

為什么我不能在 C 中用“*”-s (stars) 初始化一個“const char chars [5] [10]”數組?

[英]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");
    }
}

有兩個錯誤:

  1. 初始化二維數組時,應使用'c'"string"
  2. 使用%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.

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