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';
답변
문자열을 다루는 경우 char 배열을 0으로 만들려고하지 마십시오. 다음은 char 문자열로 작업하는 간단한 방법입니다.
복사 (새 문자열 할당) :
strcpy(members, "hello");
연결 (문자열 추가) :
strcat(members, " world");
빈 문자열 :
members[0] = 0;
그렇게 간단합니다.
답변
문자 멤버 [255] = {0};
답변
편집 : 질문에 대한 가장 최근 편집을 감안할 때 null 종료가 없으므로 더 이상 작동하지 않습니다. 배열을 인쇄하려고하면 문자 뒤에 사람이 읽을 수없는 문자가 여러 개 표시됩니다. 그러나 나는이 답변을 후손을위한 커뮤니티 위키로 남겨두고 있습니다.
char members[255] = { 0 };
작동합니다. C 프로그래밍 언어에 따르면 :
배열의 크기가 고정 된 경우 이니셜 라이저의 수는 배열의 구성원 수를 초과 할 수 없습니다. 더 적 으면 나머지 멤버는 0으로 초기화됩니다.
이것은 배열의 모든 요소가 0의 값을 갖는다는 것을 의미합니다. 0이 유효한 값이기 때문에 이것이 “비어있다”고 생각하는지 아닌지 확실하지 않습니다 char
.
답변
배열은 비울 수 없으며 항상 동일한 양의 데이터를 포함합니다.
더 큰 맥락에서 배열의 데이터는 빈 항목 목록을 나타낼 수 있지만 배열에 추가하여 정의해야합니다. 이를 수행하는 가장 일반적인 방법은 유효한 항목의 개수를 유지하거나 (pmg의 답변 참조) 문자열이 0 문자로 종료되도록하는 것입니다 (Felix의 답변). 더 복잡한 방법도 있습니다. 예를 들어 링 버퍼는 데이터가 추가되고 제거되는 위치에 대해 두 개의 인덱스를 사용합니다.
답변
members[0] = 0;
귀하의 요구 사항을 고려할 때 충분합니다.
그러나 이것이 버퍼를 “비우는”것은 아닙니다. 메모리는 여전히 할당되고 유효한 문자 값이 여전히 존재할 수 있습니다.