台灣最大程式設計社群網站
線上人數
750
 
會員總數:244988
討論主題:188956
歡迎您免費加入會員
討論區列表 >> C/C++ >> C 語言如何清空陣列 大大們 求救!!!!!
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
C 語言如何清空陣列 大大們 求救!!!!!
價值 : 0 QP  點閱數:65755 回應數:9

樓主

繼小昱
初學者
34 50
343 53
發送站內信

大大們         請教一下c++如何將陣列清空 ?
本篇文章發表於2005-01-18 15:48
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
清空陣列大約是兩種方式
1. 用迴圈...每一個都填入0(總不會告訴我, 您不知道陣列多大吧)

2. free掉這個陣列..再new一個新的出來
本篇文章回覆於2005-01-20 01:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

weishi
檢舉此回應
用各語言之標準程式庫內建的"標準"函數, i.e. C 語言中的memset()函數...
(若optimized夠好, 應該執行比較快!)

#include "stdafx.h"

//#include <stdio.h>
//#include <memory.h>

int _tmain(int argc, _TCHAR* argv[])
{

   char buffer[] = "This is a test of the memset function";

   printf( "Before: %s\n", buffer );
   memset( buffer, '*', 4 );
   printf( "After:  %s\n", buffer );

   memset( buffer, '+', strlen(buffer) );
   printf( "After2:  %s\n", buffer );

   memset( buffer, 0, strlen(buffer) );                // fill with zero.

   // yourType yourBuffer[bNumberItems];
   // memset( yourBuffer, 0, sizeof(yourType)*bNumberItems );

   return 0;
}

/*******************************************
結果為...
Before: This is a test of the memset function
After:  **** is a test of the memset function
After2:  +++++++++++++++++++++++++++++++++++++

********************************************/
memset()函數, 可在MSDN online help找到...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_memset.asp
本篇文章回覆於2005-01-24 18:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
若為 
char buffer[] = "This is a test of the memset function";
則利用指標直接清最快,利用字串結尾符號為'\0'的特性
這裡的實作方式又有好幾種, 以下列出其中一種
char *ptr;
ptr=buffer
printf( "Before: %s\n", buffer );
while (ptr !='\0')
 *(ptr++)='\0';  
printf( "After:  %s\n", buffer );

呼叫內建函數固然很方便..卻不見得好用,
其中包括strlen其實已經掃過buffer一次, 效能反而比較差...
自己寫比較快喔
本篇文章回覆於2005-01-25 00:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
其實清空字串...還有另外一個方法
strcpy(buffer,"");

沒了, 就這樣?!  ^___^a
本篇文章回覆於2005-01-25 00:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

阿魚
捐贈 VP 給 t313036 檢舉此回應
需要那ㄇ麻煩嗎@@
直接用 a[]={0}; 
不就好ㄌ@@?
本篇文章回覆於2005-02-03 22:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
1. 用迴圈...每一個都填入0, 這個方法可行~
2. free掉這個陣列..再new一個新的出來, 好像不一定可行, 怎麼解釋ㄋ...

   有點類似: global(或static)變數可行, 但local變數則不一定, 因為local變數是在
   stack 中產生的,不一定會做initial動作, 好像每一種compiler做法不一定,
   但global(或static)變數一般的compiler會自動initial(除非那個compiler很爛...= =")

   所以new出來的不一定有經過initial(要看compiler或該物件的constructor)~

3. memset(), 這個方法可行~(我都用這種, 推薦使用這種), 浮點數Array應該也可以用, 建議使用sizeof, 不用strlen
4. 使用 '\0'(NULL), 不可行, 例如:單byte的整數Array: 1,2,3,0,4,5,6則4, 5, 6清不到, 只會清到0為止,
   雙byte整數Array 01, 02, 03...可能只清到 01 的前半個0就停了
   字元陣列(不是字串)一樣只會清到第一個NULL('\0')
5. strcpy(buffer,""), 不可行, 同第4點, 這個只適合清空字串.
6. a[]={0};   這個是不是只能 initial啊??  @.@a...我不太確定.......
本篇文章回覆於2005-03-02 01:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

Jerry Hsieh
檢舉此回應
try
// memset( buffer, '\0', strlen(buffer) );
如果你的陣列存的是指標
for (int count = 0; count < ArrayRange; count++)
{
  void * pTmp = Array[count];
  delete pTmp;
}
本篇文章回覆於2005-03-03 23:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

好手
捐贈 VP 給 好手 檢舉此回應
以前用Borland C++,印象中好像有delete ArrayName 
就可以刪掉array........=.=
不是很清楚了,試試看吧!反正短短的
本篇文章回覆於2005-03-08 01:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
刪掉array和清除內容
兩者差很多耶 ^___^a

用指標清內容,看起來寫了很多,事實上, 執行只是一瞬間的事情啦
本篇文章回覆於2005-03-08 16:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.