programing

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

prostudy 2022. 4. 24. 09:33
반응형

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

문자 배열이 비어 있는지 확인하는 가장 신뢰할 수 있는 방법은?

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-terminated 문자열이 있는지 여부에 따라 다름.만약 그렇다면,

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

충분할 거야

편집: 다른 방법은...

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

잠재적으로 효율성은 떨어지지만 당신의 의도를 분명하게 표현하는 겁니다.

이것은 문자 배열이 비어 있는지 여부를 찾는 데 효과적일 것이다.그것은 아마도 가장 빠를 것이다.

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

이것 또한 만약 그 일이 일어난다면 빠를 것이다.text배열이 비어 있다.만약 그것이 문자를 포함하고 있다면, 먼저 그것의 모든 문자를 세어야 한다.

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

두 번째 방법은 한 번의 읽기 및 한 번의 비교를 수반하기 때문에 거의 확실히 null-terminated 문자열이 비어 있는지 여부를 테스트하는 가장 빠른 방법이 될 것이다.이 경우에는 확실히 이 접근법에 아무런 문제가 없으니, 그것을 이용하는 편이 좋다.

세 번째 방법은 문자 배열이 비어 있는지 여부를 확인하지 않고 문자 배열이 비어 있는지 확인한다.

두 번째 것이 가장 빠르다.사용.strlen끈이 정말 비어있으면 가까우겠지만strlen문자열의 모든 문자를 통해 항상 반복되므로 비어 있지 않으면 필요한 것보다 훨씬 많은 작업을 수행할 수 있다.

제임스가 언급했듯이 세 번째 옵션은 확인 전에 문자열을 지우기 때문에 체크는 항상 성공하지만 의미가 없을 것이다.

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

반응형