클리어, char 배열 c
첫 번째 요소를 null로 설정하면 char 배열의 전체 내용이 지워질 것이라고 생각했습니다.
char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';
단, 첫 번째 요소만 null로 설정됩니다.
또는
my_custom_data[0] = 0;
차라리memset
위의 두 예시는 모든 데이터를 삭제해야 한다고 생각합니다.
어레이를 표시하는 방법에 따라 다릅니다.어레이를 일련의 문자로 표시할 경우 데이터를 클리어하려면 모든 엔트리를 터치해야 합니다. memset
아마 가장 효과적인 방법일 겁니다.
한편, 이것을 C/C++ 늘 종단 문자열로 표시하는 경우는, 최초의 바이트를 0 으로 설정하면, 그 문자열이 실질적으로 클리어 됩니다.
장소일 는 기억의 장소입니다.따라서 실제로는my_custom_data[0] = '\0';
할당은 첫 번째 요소를 0으로 설정하고 다른 요소를 그대로 유지합니다.
배열의 모든 요소를 지우려면 각 요소를 방문해야 합니다.이 바로 게거그 that의 말이다.memset
을 사용하다
memset(&arr[0], 0, sizeof(arr));
이것이 일반적으로 이 문제를 해결하는 가장 빠른 방법입니다.C++ 를 사용할 수 있는 경우는, 대신에 std::fill 을 고려해 주세요.
char *begin = &arr;
char *end = begin + sizeof(arr);
std::fill(begin, end, 0);
단일 요소를 설정하면 어레이 전체가 지워진다고 생각하는 이유는 무엇입니까?특히 C에서는 프로그래머가 명시적으로 프로그래밍하지 않으면 거의 발생하지 않습니다.첫 번째 요소를 0(또는 임의의 값)으로 설정했을 경우, 그 이상은 아무것도 하지 않은 것입니다.
초기화할 때 어레이를 0으로 설정할 수 있습니다.
char mcd[40] = {0}; /* sets the whole array */
그 외에는 memset이나 비슷한 것 말고는 아무것도 모릅니다.
용도:
memset(my_custom_data, 0, sizeof(my_custom_data));
또는 다음 중 하나를 선택합니다.
memset(my_custom_data, 0, strlen(my_custom_data));
다음 코드를 사용해 보십시오.
void clean(char *var) {
int i = 0;
while(var[i] != '\0') {
var[i] = '\0';
i++;
}
}
저는 보통 이렇게 해요.
memset(bufferar, '\0', sizeof(bufferar));
케이스 1과 케이스 2 다음에 어레이 내의 데이터로 설명한 부분을 다음에 나타냅니다.
char sc_ArrData[ 100 ];
strcpy(sc_ArrData,"Hai" );
케이스 1:
sc_ArrData[0] = '\0';
결과:
- "sc_ArrData"
[0] 0 ''
[1] 97 'a'
[2] 105 'i'
[3] 0 ''
케이스 2:
memset(&sc_ArrData[0], 0, sizeof(sc_ArrData));
결과:
- "sc_ArrData"
[0] 0 ''
[1] 0 ''
[2] 0 ''
[3] 0 ''
첫 번째 인수를 NULL로 설정하면 문제가 없지만 memset을 사용하는 것이 좋습니다.
다음 항목은 어떻습니까?
bzero(my_custom_data,40);
memset을 사용해야 합니다.첫 번째 요소만 설정해도 작동하지 않습니다.모든 요소를 설정해야 합니다.설정하지 않으면 첫 번째 요소만0 으로 설정할 수 없습니다.
'우리'를 쓰지 거죠?memset()
그렇게 하는 거야.
첫 번째 요소를 설정하면 나머지 메모리는 변경되지 않지만 str 함수는 데이터를 비어 있는 것으로 간주합니다.
아니요. 첫 번째 값을 '\0' 또는 '0'으로 설정하기만 하면 됩니다.
Null 종단 문자열로 작업하는 경우 첫 번째 예에서는 예상한 대로 동작하지만 메모리는 아직 설정되어 있습니다.
memset을 사용하지 않고 메모리를 클리어하려면 for 루프를 사용합니다.
첫 번째 문자에 늘 문자를 쓰면 됩니다.문자열로 취급할 경우 null 끝 문자에 따르는 코드는 해당 문자열을 null 문자열로 취급하지만 이는 데이터를 클리어하는 것과 동일하지 않습니다.실제로 데이터를 지우려면 memset을 사용해야 합니다.
첫 번째 요소를 null로 설정하면 char 배열의 전체 내용이 지워질 것이라고 생각했습니다.
그것은 당신이 발견한 것처럼 옳지 않다.
단, 첫 번째 요소만 null로 설정됩니다.
바로 그거야!
모든 데이터를 지우려면 memset을 사용해야 합니다. 엔트리 중 하나를 null로 설정하는 것만으로는 충분하지 않습니다.
단, 어레이의 요소를 null로 설정하면 특별한 의미가 있는 경우(예를 들어 null 끝 문자열을 사용하는 경우) 첫 번째 요소를 null로 설정하는 것으로 충분할 수 있습니다.이렇게 하면 어레이의 모든 사용자가 어레이가 메모리에 오래된 문자를 포함하더라도 비어 있음을 알 수 있습니다.
첫 번째 요소를 NULL로 설정합니다. char 배열을 인쇄하면 아무것도 반환되지 않습니다.
void clearArray (char *input[]){
*input = ' ';
}
다음을 시도해 보십시오.
strcpy(my_custom_data,"");
언급URL : https://stackoverflow.com/questions/632846/clearing-a-char-array-c
'programing' 카테고리의 다른 글
Java로 플러그인 시스템을 구축하는 가장 좋은 방법 (0) | 2022.08.31 |
---|---|
C 프리프로세서는 왜 "linux"라는 단어를 상수 "1"로 해석합니까? (0) | 2022.08.31 |
malloc()는 내부적으로 어떻게 구현됩니까? (0) | 2022.08.30 |
Java 인터페이스/실장 명명 규칙 (0) | 2022.08.30 |
Vuejs:는 요소를 숨기기.Vuejs:는 요소를 숨기기.keyup 답변? (0) | 2022.08.30 |