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
'Program Tip' 카테고리의 다른 글
AngularJS : 사용자 지정 필터 및 ng-repeat (0) | 2020.11.06 |
---|---|
DateTime으로 최신 시간을 어떻게 지정할 수 있습니까? (0) | 2020.11.06 |
Ruby on Rails에서 쿼리 문자열 인 것처럼 문자열 구문 분석 (0) | 2020.11.06 |
파이썬에서 문자열을 제목 대소 문자로 변환하는 방법은 무엇입니까? (0) | 2020.11.06 |
Python으로 Google 스프레드 시트에 액세스 (읽기, 쓰기)하려면 어떻게하나요? (0) | 2020.11.06 |