2011-11-12 18 views
31

我一直在C項目中工作,需要我解決很多字符串問題。通常情況下,我使用C++編程,所以這與僅說string.empty()有點不同。正確的方法來清空C字符串

我想知道什麼是正確的方法來清空C中的字符串會這樣嗎?

 
buffer[80] = "Hello World!\n"; 

// ... 

strcpy(buffer, ""); 
+0

你的例子很混亂。顯然緩衝區已經被聲明在其他地方,並且你嘗試從文字初始化它。這裏沒有必要清除任何東西。 – pmr

+1

string.empty()不修改字符串 –

回答

55

這取決於你的意思是「空」的東西。如果你只是想要一個零長度的字符串,那麼你的例子將工作。

這也將工作:

buffer[0] = '\0'; 

如果你想零字符串的全部內容,可以這樣來做:

memset(buffer,0,strlen(buffer)); 

但這隻會調零了工作到第一個NULL字符。

如果字符串是一個靜態數組,你可以使用:其他

memset(buffer,0,sizeof(buffer)); 
+2

爲了澄清,如果'buffer'是一個數組,但是如果它是一個指針,則最後一個方法將工作。編譯器必須能夠看到數組的大小。如果'buffer'是一個指針,它只會將指針的大小歸零,大概是4或8個字節。 –

1

取決於你的意思是清空。如果你只是想要一個空字符串,你可以做

buffer[0] = 0; 

如果你想設置的每一個元素爲零,做

memset(buffer, 0, 80); 
2

兩種方式是strcpy(str, "");string[0] = 0

要真正刪除該變量的內容(如果你有骯髒的代碼是不是正確使用上面的代碼片段:P)使用如下例所示的循環。

#include <string.h> 

... 

int i=0; 
for(i=0;i<strlen(string);i++) 
{ 
    string[i] = 0; 
} 

如果你想從一開始就明確字符的一個動態分配的數組, 您既可以使用malloc()和memset()或組合 - 這是遠遠快 - 釋放calloc(),它與malloc做同樣的事情,但用Null初始化整個數組。

最後我希望你能夠牢記運行時間。更重要的是,如果你正在處理巨大的數組(6位及以上),你應該嘗試將第一個值設置爲Null,而不是在整個String中運行memset()。

起初可能看起來更髒,但速度更快。你只需要更多的關注你的代碼;)

我希望這是對人有益的;)

0

需要串的名字和它的長度 將在第一零零散的所有字符 其他方法可能會停止他們遇到

void strClear(char p[],u8 len){u8 i=0; 
     if(len){while(i<len){p[i]=0;i++;}} 
    } 
相關問題