문자 배열이 비어 있는지 확인하는 가장 좋은 방법
문자 배열이 비어 있는지 확인하는 가장 안정적인 방법은 무엇입니까?
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
'IT Share you' 카테고리의 다른 글
하나의 XAML 스타일에 대해 여러 TargetType을 정의 할 수 있습니까? (0) | 2020.12.11 |
---|---|
Emacs 구문 강조 색상 변경 (0) | 2020.12.11 |
매개 변수 IEnumerable (0) | 2020.12.11 |
루비-고정 된 문자열을 수정할 수 없습니다 (TypeError). (0) | 2020.12.11 |
PHP에서 사용되지 않는 set_magic_quotes_runtime을 어떻게 바꿀 수 있습니까? (0) | 2020.12.11 |