Program Tip

char 배열을 비우는 방법?

programtip 2020. 11. 6. 19:05
반응형

char 배열을 비우는 방법?


char members [255]와 같은 문자 배열이 있습니다. 루프를 사용하지 않고 어떻게 완전히 비울 수 있습니까?

char members[255];

"비어 있음"은 일부 값이 저장되어 있으면 안된다는 의미입니다. 예를 들어 strcat을 수행하면 이전 값이 유지되지 않아야합니다.

members = "old value";

//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"

사용

  memset(members, 0, 255);

일반적으로

  memset(members, 0, sizeof members);

배열이 범위 내에있는 경우 또는

  memset(members, 0, nMembers * (sizeof members[0]) );

포인터 값만 있고 nMembers는 배열의 요소 수입니다.


편집 물론 이제 요구 사항은 배열을 지우는 일반적인 작업에서 순전히 문자열을 재설정하는 것으로 변경되었으며 memset과도하고 첫 번째 요소를 0으로 설정하면 충분합니다 (다른 답변에서 언급했듯이).


편집 memset 을 사용하려면 string.h포함 해야합니다 .


'비어 있음'이 의미하는 바에 따라 다릅니다.

members[0] = '\0';

문자 멤버 [255] = {0};


편집 : 질문에 대한 가장 최근 편집을 감안할 때 null 종료가 없으므로 더 이상 작동하지 않습니다. 배열을 인쇄하려고하면 문자 뒤에 사람이 읽을 수없는 문자가 여러 개 표시됩니다. 그러나 나는이 답변을 후손을위한 커뮤니티 위키로 남겨두고 있습니다.

char members[255] = { 0 };

작동합니다. C 프로그래밍 언어에 따르면 :

배열의 크기가 고정 된 경우 이니셜 라이저의 수는 배열의 구성원 수를 초과 할 수 없습니다. 더 적 으면 나머지 멤버는 0으로 초기화됩니다.

이것은 배열의 모든 요소가 0의 값을 갖는다는 것을 의미합니다. 0이 유효한 값이기 때문에 이것이 "비어있다"고 생각하는지 아닌지 확실하지 않습니다 char.


문자열을 다루는 경우 char 배열을 0으로 만들려고하지 마십시오. 다음은 char 문자열로 작업하는 간단한 방법입니다.

복사 (새 문자열 할당) :

strcpy(members, "hello");

연결 (문자열 추가) :

strcat(members, " world");

빈 문자열 :

members[0] = 0;

그렇게 간단합니다.


배열을 비울 수는 없으며 항상 동일한 양의 데이터를 포함합니다.

더 큰 맥락에서 배열의 데이터는 빈 항목 목록을 나타낼 수 있지만 배열에 추가하여 정의해야합니다. 이를 수행하는 가장 일반적인 방법은 유효한 항목의 개수를 유지하거나 (pmg의 답변 참조) 문자열이 0 문자로 종료되도록하는 것입니다 (Felix의 답변). 더 복잡한 방법도 있습니다. 예를 들어 링 버퍼는 데이터가 추가되고 제거되는 위치에 대해 두 개의 인덱스를 사용합니다.


사용하다 bzero(array name, no.of bytes to be cleared);


나는 함께 갈 것이다

members_in_use = 0;

members[0] = 0;

귀하의 요구 사항을 고려할 때 충분합니다.

그러나 이것이 버퍼를 "비우는"것은 아닙니다. 메모리는 여전히 할당되고 유효한 문자 값이 여전히 존재할 수 있습니다.


0으로 재설정하는 것을 의미하는 경우 "배열을 비우십시오"라고하면 bzero를 사용할 수 있습니다.

#include <strings.h>  
void bzero(void *s, size_t n);  

배열을 다른 기본 문자로 채우려면 memset 함수를 사용할 수 있습니다.

#include <string.h>  
void *memset(void *s, int c, size_t n);  

간단할수록 좋습니다.

이 경우 members [0] = 0 만 작동합니다. 간단한 질문을 그렇게 복잡하게 만들지 마십시오.


면책 조항 : 저는 일반적으로 C로 프로그래밍하지 않으므로 예제에 구문 문제가있을 수 있지만 표현하려는 아이디어가 명확하기를 바랍니다.

"비어 있음"이 "빈 문자열 포함"을 의미하는 경우 첫 번째 배열 항목을 0으로 할당하면 배열에 임시 문자열이 포함되도록 효과적으로 만들 수 있습니다.

members[0] = 0;

If "emptying" means "freeing the memory it is using", you should not use a fixed char array in the first place. Rather, you should define a pointer to char, and then do malloc / free (or string assignment) as appropriate.

An example using only static strings:

char* emptyString="";
char* members;

//Set string value
members = "old value";

//Empty string value
member = emptyString

//Will return just "new"
strcat(members,"new");

You can use the following instruction:

strcpy_s(members, "");

참고URL : https://stackoverflow.com/questions/1559487/how-to-empty-a-char-array

반응형