programing

클리어, char 배열 c

goodcopy 2022. 8. 31. 00:00
반응형

클리어, 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

반응형