簡體   English   中英

char str []中括號之間的值是什么意思?

[英]What is the meaning of the value placed between the braces in char str[]?

要清楚,我不是要問char * str和char str []之間的區別。 我不僅僅是一個初學者。 我正在實現以下代碼:

// Convert long long to string 
    char number_str[];
    sprintf(number_str, "%lld", number_ll);

當我運行printf("%s\\n", number_str); ,無論我在這些括號之間放置2還是256,它都會吐出正確的數字。 這讓我想問一下,這些括號是什么?

我在這篇文章中接觸過char str[]

當我運行printf("%s\\n", number_str); ,無論我在這些括號之間放置2還是256,它都會吐出正確的數字。 這讓我想問一下,這些括號是什么?

這是因為您的代碼調用了未定義的行為 您尚未為陣列分配空間。

char str[]括號之間的值是什么意思?

這意味着您要為陣列分配多少空間。 但請注意,當使用初始化程序時,可以省略此值,即數組的長度(多維數組的情況下的第一個維度)。

在數組聲明中, []之間的數字指定數組中的元素數。

您問題中的代碼:

char number_str[];
sprintf(number_str, "%lld", number_ll);

是非法的。 如果它出現在函數定義中,則不能使用空括號; 您必須指定數組的大小 - 並且對sprintf或任何其他函數的調用只能出現在函數定義中。

如果確實指定了數組的大小:

char number_str[100];
sprintf(number_str, "%lld", number_ll);

創建一個對象number_str ,它是一個包含100個char元素的數組。 如果你使數組太小:

char number_str[3];
sprintf(number_str, "%lld", number_ll); /* let's say number_ll == 12345 */

那么你的程序似乎可以工作,但實際上它的行為是不確定的 sprintf調用將嘗試在3個字符的數組中存儲6個字符。

AC編譯器沒有義務診斷此錯誤。 它很可能會讓你嘗試這樣做,導致數據被寫入你不擁有的內存區域。

在文件范圍,您可以聲明如下內容:

extern char array[];

它指定一個名為array的對象,類型為array(某些未指定大小) char在其他地方定義。

作為一個(相當煩人的)特殊情況,使用數組語法定義的函數參數實際上是一個指針:

void func(char param[42]) {
    /* param is a pointer; the 42 is silently ignored */
}

永遠記住數組和指針是兩回事。 有關他們公認的混亂關系的解釋,請參閱comp.lang.c常見問題解答的第6部分。

暫無
暫無

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

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