2011-11-12 3 views
31

나는 C로 문자열을 많이 어지럽히도록 요구하는 프로젝트를 작업 해왔다. 일반적으로 C++로 프로그램을 작성하기 때문에 string.empty()와 약간 다릅니다.C-String을 비우는 적절한 방법

C에서 문자열을 비우는 적절한 방법이 궁금합니다.이게 맞겠습니까?

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

// ... 

strcpy(buffer, ""); 
+0

귀하의 예제는 혼란 스럽습니다. 분명히 다른 곳에서 버퍼가 선언되었으며 리터럴에서 버퍼를 초기화하려고합니다. 여기서 아무 것도 정리할 필요가 없습니다. – pmr

+1

string.empty()는 문자열 –

답변

55

할 수 있습니다. 길이가 0 인 문자열 만 원할 경우 예제가 작동합니다. 당신은 문자열의 전체 내용을 제로로하려면

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 자리 이상)을 처리하는 경우에는 전체 문자열을 통해 memset()을 실행하는 대신 Null로 첫 번째 값을 설정해야합니다.

처음에는 더러워 보일 수 있지만 더 빠릅니다. 첫 번째 제로 다른 방법이 중지 될 수 있습니다 모든 문자를 제로 것) 문자열의

0

요구 이름과 길이)

나는이 사람을 위해 유용 희망

을, 당신은 당신의 코드에 더 많은 관심을 지불 할 필요가 그들은 만남

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