討論區快速選單
知識庫快速選單
網路投保旅行平安險 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
剩下的一點c字串/字元陣列問題
更改我的閱讀文章字型大小
作者 : kotty123(存在)
[ 貼文 56 | 人氣 0 | 評價 10 | 評價/貼文 0.18 | 送出評價 12 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/9/8 下午 11:59:55
上一篇我的問題
Raymond 辛苦不放棄的回覆
讓我對於c字串的定義更加瞭解 也把我的錯誤觀念導正

剩下沒問的2個問題 (視第1題答案在決定要不要問第3題,因為那題與第1題有關聯)
需要再麻煩一下了..


1.
上一篇我知道了c字串的補0機制,
但請問c純粹放字元的陣列 的補0機制呢?
是不是總字元數不到陣列長度,編譯器就在最後一個字元後面開始補0?





2.
像是
char m2[13]="abc\0def\0ghi\0\0";
這在c語言是合格的, 在c++是不合格的
對吧? (這題只是求心安


謝謝
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/9/9 上午 07:52:43
>1.
>上一篇我知道了c字串的補0機制,

什麼叫做『c字串的補0機制』?

>但請問c純粹放字元的陣列 的補0機制呢?

請問你所謂的『c純粹放字元的陣列的補0機制』跟上面的『c字串的補0機制』的分別在哪裡?


總的來說, 這不叫什麼『補0機制』. 在 C 及 C++ 語言裡, 在初始化(任何類型的)陣列的時候, 如果提供的初始值不足, 沒有初始值的陣列元素會初始化為 0 (這叫 zero-initialized).

這是程式語言的定義, 適用於任何類型. 事實上, 把一個(任何類型的)陣列在定義時同時初始化為 0 最簡單的方法就是:
  T tArray[N] = { 0 };

N 是任何正整數常數.
'T' 可以是任何類型.

例:
  int iArray[100] = { 0 };

  char chArray[80] = { 0 };

  struct S
  {
    int i;
    double d;
    char ca[20];
    void* p;
  };
  S sArray[10] = { 0 };


>是不是總字元數不到陣列長度,編譯器就在最後一個字元後面開始補0?

不然你認為在哪裡?


>2.
>像是
>char m2[13]="abc\0def\0ghi\0\0";
>這在c語言是合格的, 在c++是不合格的
>對吧? (這題只是求心安

到現在還要問這些問題, 覺得之前的的回覆都白費工夫, 也覺得自己好失敗!!!

作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/9/9 上午 10:53:23
>也覺得自己好失敗!!!

不是大師你的教學有問題
程式是講求實作 講求規範的世界
不是講求想像講求哲理的初學者能懂的
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 409 | 人氣 0 | 評價 1890 | 評價/貼文 4.62 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/9/9 下午 01:10:09
我沒有要吐你的嘈,但我覺得初學者講哲理會不會太高深了?印象中的初學者應該都還在講技巧、講練習比較多吧!
程式的哲學總是要有一定的深入了解、足夠的實做心得、足夠的觀看交流別人的感想後,才有辦法探討的是吧?
作者 : kotty123(存在)
[ 貼文 56 | 人氣 0 | 評價 10 | 評價/貼文 0.18 | 送出評價 12 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/9/9 下午 10:21:02
>請問你所謂的『c純粹放字元的陣列的補0機制』跟上面的『c字串的補0機制』的分別在哪裡?
>
>總的來說, 這不叫什麼『補0機制』. 在 C 及 C++ 語言裡, 在初始化(任何類型的)陣列的時候, 如果提供的初始值不足, 沒有初始值的陣列元素會初始化為 0 (這叫 zero-initialized).
>
>這是程式語言的定義, 適用於任何類型. 事實上, 把一個(任何類型的)陣列在定義時同時初始化為 0 最簡單的方法就是:
>  T tArray[N] = { 0 };
>
>N 是任何正整數常數.
>'T' 可以是任何類型.
>
>例:
>  int iArray[100] = { 0 };
>
>  char chArray[80] = { 0 };
>
>  struct S
>  {
>    int i;
>    double d;
>    char ca[20];
>    void* p;
>  };
>  S sArray[10] = { 0 };
>



瞭解,
所以 假如 char k[4]={'r','t','b'};
因為初值數量不到陣列長度編譯器補0之後, 這個k就變成c字串了
挺有趣的 ...
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4499 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/10/22 上午 01:36:31
http://en.cppreference.com/w/cpp/language/zero_initialization
 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 13050 
2 青衫 4760 
3 simula 4690 
4 coco 4030 
5 白老鼠(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.15625