[c] 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 ++ null로 끝나는 문자열로보기로 선택한 경우 첫 번째 바이트를 0으로 설정하면 문자열이 효과적으로 지워집니다.


답변

C의 배열은 메모리 위치 일 뿐이므로 실제로 my_custom_data[0] = '\0';할당은 첫 번째 요소를 0으로 설정하고 다른 요소는 그대로 둡니다.

배열의 모든 요소를 ​​지우려면 각 요소를 방문해야합니다. 그 이유 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()않습니까? 그렇게하는 방법입니다.

첫 번째 요소를 설정하면 나머지 메모리는 그대로 유지되지만 str 함수는 데이터를 비어있는 것으로 처리합니다.


답변

Pls는 사례 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을 사용하는 것이 좋습니다.