字符串初始化
回答
之間的差別,因爲你已經宣佈的尺寸,兩個聲明是完全平等的。但是,如果不指定大小,你可以看到,第一個聲明中作出較大的字符串:
char a[] = "a\0";
char b[] = "a";
printf("%i %i\n", sizeof(a), sizeof(b));
打印
3 2
這是因爲有兩個空值的結束(顯式之一,隱含的),而b僅以隱式結束。
除非我弄錯了,否則第一個會將2個字符初始化爲0('\ 0'和始終存在的終止符,其餘不變,最後只會初始化1個字符(終止符)。
正如其他人所指出的那樣,「」意味着一個終止「\ 0」字符,所以「\ 0」實際上初始化兩個空字符數組。
一些其他的應答者已經暗示,這是「同「,但這並不完全正確,可能沒有實際區別 - 只要使用數組的唯一方法就是將其引用爲以第一個字符開頭的C字符串,但請注意,它們確實導致了兩個不同的記憶initalizati特別是它們在Str [1]絕對爲零還是未初始化(根據編譯器,操作系統和其他隨機因素可能是任何東西)方面有所不同。這個數組有一些用法(可能不是有用的,但仍然)會有不同的行爲。
在問題的上下文中,指定數組的大小時,結果是相同的 - 字母「a」後面跟着31個空字節「0」。只有在未定義數組的情況下才會有區別。 – 2014-10-09 04:02:31
沒有區別。它們都會在未聲明的符號上產生編譯器錯誤。 :P
假設你指的是代碼爲Str [32] =「\ 0」;`和Str [32] =「」的問題的原始版本,並斷言這些應該會產生編譯器錯誤。當然,這取決於上下文。如果被視爲「定義」(因爲它們在問題的修訂版本中),那麼類型(`char`)就會丟失。如果你假設`char * Str [33];`作爲先前的定義,那麼兩者都是有意義的(但指向的字符串是不同的),但與其他答案假設不同。這個答案沒有幫助,因爲它沒有解釋爲什麼。 – 2014-10-09 15:09:24
那麼,假設兩種情況如下(以避免編譯器錯誤):
char str1[32] = "\0";
char str2[32] = "";
正如人們所說的,str1和兩個空字符初始化:
char str1[32] = {'\0','\0'};
char str2[32] = {'\0'};
然而根據C和C++標準,如果數組的一部分被初始化,則數組的其餘元素將被默認初始化。對於一個字符陣列,剩餘字符是初始化所有零(即空字符),所以陣列是真的初始化爲:
char str1[32] = {'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0'};
char str2[32] = {'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0'};
因此,在端部,確實在兩者之間沒有差別。
重要觀察! – jfm3 2008-09-16 21:36:46
嗯那麼用指針初始化呢?
char *myString = "Here is a string";
雖然傳統的原因,我更喜歡用:
unsigned char *myString = "Here is a string";
在這種情況下,空終止是由編譯器嵌入。 您可以將指針指向另一個字符串,並且您指定任意長度的字符串都是獨立的 。
- 1. Android字符串初始化
- 2. 初始化「的字符串」
- 3. 字符串初始化
- 4. GPS初始化字符串?
- 5. 與初始化字符串字面
- 6. 初始化字符*
- 7. 從字符串初始化單元
- 8. 初始化字符串使用指針
- 9. C中的字符串初始化
- 10. 字符串初始化和性能
- 11. LLVM IR字符串初始化
- 12. 初始化字符串用雙引號
- 13. 字符串不斷初始化爲空
- 14. 字符串的聲明和初始化
- 15. 連接字符串未初始化
- 16. 字符串列表初始化
- 17. 字符串變量初始化錯誤
- 18. NullPointerException(初始化字符串時)
- 19. C++的初始化字符串指針
- 20. 初始化多朦字符串數組
- 21. 用argv初始化C++字符串
- 22. 字符串初始化失敗
- 23. 初始化ObjectC中的空字符串?
- 24. C++ 11字符串初始化
- 25. 使用初始化字符串數組
- 26. 的C#初始化字符串數組
- 27. 使用nsmutabledata初始化字符串
- 28. 字符串數組初始化
- 29. 使用字符串初始化
- 30. 出錯初始化字符串流
數組的尾部字節也將爲零字節。 – 2014-10-09 04:02:50