IT Share you

문자 배열이 비어 있는지 확인하는 가장 좋은 방법

shareyou 2020. 12. 11. 20:56
반응형

문자 배열이 비어 있는지 확인하는 가장 좋은 방법


문자 배열이 비어 있는지 확인하는 가장 안정적인 방법은 무엇입니까?

char text[50];

if(strlen(text) == 0) {}

또는

if(text[0] == '\0') {}

아니면해야합니까

 memset(text, 0, sizeof(text));
 if(strlen(text) == 0) {}

이것에 대해 가장 효율적인 방법은 무엇입니까?


이 코드가 주어지면 :

char text[50];
if(strlen(text) == 0) {}

이 코드에 대한 질문이 이어집니다.

 memset(text, 0, sizeof(text));
 if(strlen(text) == 0) {}

혼란스러운 냄새가납니다. 특히이 경우 :

char text[50];
if(strlen(text) == 0) {}

...의 내용 text[]이 초기화 및 정의되지 않습니다. 따라서 strlen(text)정의되지 않은 결과를 반환합니다.

C 문자열이 빈 문자열로 초기화되도록하는 가장 쉽고 / 빠른 방법은 첫 번째 바이트를 0으로 설정하는 것입니다.

char text[50];
text[0] = 0;

그때부터 strlen(text)매우 빠르지 만 간단하지 않은 (text[0] == 0)테스트는 모두 빈 문자열을 감지합니다.


배열이 null로 끝나는 문자열을 보유하고 있는지 여부에 따라 다릅니다. 그렇다면

if(text[0] == '\0') {}

충분해야합니다.

편집 : 또 다른 방법은 ...

if (strcmp(text, "") == 0)

잠재적으로 덜 효율적이지만 의도를 명확하게 표현합니다.


이것은 문자 배열이 비어 있는지 찾기 위해 작동합니다. 아마도 가장 빠를 것입니다.

if(text[0] == '\0') {}

text배열이 비어있는 경우에도 빠릅니다 . 문자가 포함되어있는 경우 먼저 모든 문자를 계산해야합니다.

if(strlen(text) == 0) {}

두 번째 방법은 한 번의 읽기와 한 번의 비교를 포함하므로 널로 끝나는 문자열이 비어 있는지 여부를 테스트하는 가장 빠른 방법입니다. 이 경우이 접근 방식에는 확실히 잘못된 것이 없으므로 사용하는 것이 좋습니다.

세 번째 방법은 문자 배열이 비어 있는지 확인하지 않습니다. 문자 배열이 비어 있는지 확인합니다.


두 번째가 가장 빠릅니다. 문자열이 실제로 비어 있으면 사용 strlen은 닫히지 항상 문자열의 모든 문자를 반복하므로 비어 있지 않으면 필요한 것보다 훨씬 많은 작업을 수행합니다.strlen

James가 언급했듯이 세 번째 옵션은 확인하기 전에 문자열을 지우므로 확인은 항상 성공하지만 의미가 없습니다.


if (text[0] == '\0')
{
    /* Code... */
}

플래시 및 / 또는 RAM 공간이 거의없는 마이크로 컨트롤러 용으로 코딩하는 경우이 옵션을 사용하십시오. 당신은 낭비 를 많이 사용하여 더 많은 플래시를 strlen첫 번째 바이트를 확인하는 것보다.

위의 예는 가장 빠르고 계산이 덜 필요합니다.


if (!*text) {}  

위는 '텍스트'포인터를 역 참조하고 그것이 0인지 확인합니다. 또는 :

if (*text == 0) {} 

참고 URL : https://stackoverflow.com/questions/1793867/best-way-to-check-if-a-character-array-is-empty

반응형