C 문자열이 비어 있는지 확인하는 방법
C에 어떤 문자열이 비어 있는지 확인해야 하는 아주 작은 프로그램을 쓰고 있습니다.이 질문을 위해 코드를 단순화했습니다.
#include <stdio.h>
#include <string>
int main() {
char url[63] = {'\0'};
do {
printf("Enter a URL: ");
scanf("%s", url);
printf("%s", url);
} while (/*what should I put in here?*/);
return(0);
}
사용자가 아무것도 입력하지 않고 enter만 누르면 프로그램이 루프를 멈추길 원합니다.
C 스타일 문자열은 항상 늘 문자로 끝납니다( ).\0
)에 기입하면 문자열이 비어 있는지 여부를 확인할 수 있습니다.
do {
...
} while (url[0] != '\0');
또는 다음 명령어를 사용할 수도 있습니다.strcmp
이 함수는 오버킬이지만 읽기 쉬울 수 있습니다.
do {
...
} while (strcmp(url, ""));
주의:strcmp
문자열이 다르면 0이 아닌 값을 반환하고 같은 문자열이면 0이 반환되므로 이 루프는 문자열이 비어 있지 않을 때까지 계속 반복됩니다.
이게 도움이 됐으면 좋겠네요!
문자열이 비어 있는지 확인하는 경우:
if (str[0] == '\0')
{
// your code here
}
이를 위한 가장 빠른 방법은 다음과 같습니다.
do {
// Something
} while (*url);
기본적으로는*url
배열의 첫 번째 위치에 있는 문자를 반환합니다.C 문자열은 늘 종단되므로 문자열이 비어 있으면 첫 번째 위치가 문자가 됩니다.'\0'
ASCII 값은0
C 논리문은 모든 제로 값을 다음과 같이 취급하기 때문에false
이 루프는 스트링의 첫 번째 위치가 비어 있지 않은 동안 계속 진행됩니다.
이를 더 잘 이해하려면 권장되는 판독치:
- C 문자열: https://www.tutorialspoint.com/cprogramming/c_strings.htm
- C 어레이: https://www.tutorialspoint.com/cprogramming/c_arrays.htm
- 어레이와 포인터의 관계:https://www.programiz.com/c-programming/c-pointers-arrays
- 논리 연산자: https://www.tutorialspoint.com/cprogramming/c_logical_operators.htm
strlen(url)
문자열 길이를 반환합니다.NULL 바이트가 발견될 때까지 모든 문자를 카운트합니다.이 경우 0과 대조하여 확인합니다.
또는 다음을 사용하여 수동으로 확인할 수 있습니다.
*url == '\0'
이 매크로를 적어놨습니다.
#define IS_EMPTY_STR(X) ( (1 / (sizeof(X[0]) == 1))/*type check*/ && !(X[0])/*content check*/)
그렇겠지
while (! IS_EMPTY_STR(url));
이 매크로의 장점은 타입이 안전하다는 것입니다.문자 포인터 이외의 것을 입력하면 컴파일 오류가 발생합니다.
반환값은 다음에서 확인할 수 있습니다.scanf
이 코드는 문자열을 수신할 때까지 그대로 있습니다.
int a;
do {
// other code
a = scanf("%s", url);
} while (a <= 0);
만약에 첫 번째 캐릭터가'\0'
, 빈 문자열이 있습니다.
다음과 같이 해야 합니다.
do {
/*
* Resetting first character before getting input.
*/
url[0] = '\0';
// code
} while (url[0] != '\0');
일반적으로 여기서 빈 문자열을 얻는 데 어려움이 있을 것입니다.%s
공백(스페이스, 탭, 줄 바꿈)을 무시합니다.그래도 실제로 성공한 매치 수를 반환합니다.
man 페이지부터:
일치 및 할당에 성공한 입력 항목의 수. 이는 제공된 것보다 적을 수 있으며 조기 일치 실패 시 0일 수도 있습니다.
든 빈.ctrl+z
예를 들어) 반환 결과를 확인할 수 있습니다.
int count = 0;
do {
...
count = scanf("%62s", url); // You should check return values and limit the
// input length
...
} while (count <= 0)
드린 이기 때문에 을 덜 합니다.-1
페이지에 나와 있습니다.
첫 번째 변환이 성공하거나 일치하는 오류가 발생하기 전에 입력이 종료되면 값 EOF가 반환됩니다.읽기 에러가 발생했을 경우에도 EOF가 반환됩니다.이 경우 스트림의 에러 인디케이터(ferror(3) 참조)가 설정되어 errno가 설정되어 있으면 에러가 표시됩니다.
strtok을 사용하면 "if (strtok(s), \t)==SJB"라는 한 줄만으로 수행할 수 있습니다.예를 들어 다음과 같습니다.
#include <stdio.h>
#include <string.h>
int is_whitespace(char *s) {
if (strtok(s," \t")==NULL) {
return 1;
} else {
return 0;
}
}
void demo(void) {
char s1[128];
char s2[128];
strcpy(s1," abc \t ");
strcpy(s2," \t ");
printf("s1 = \"%s\"\n", s1);
printf("s2 = \"%s\"\n", s2);
printf("is_whitespace(s1)=%d\n",is_whitespace(s1));
printf("is_whitespace(s2)=%d\n",is_whitespace(s2));
}
int main() {
char url[63] = {'\0'};
do {
printf("Enter a URL: ");
scanf("%s", url);
printf("url='%s'\n", url);
} while (is_whitespace(url));
return 0;
}
다음과 같이 시도할 수 있습니다.
if (string[0] == '\0') {
}
이 경우 다음과 같은 경우가 있습니다.
do {
...
} while (url[0] != '\0')
;
" " 를 합니다.scanf()
fgets()
do {
if (!fgets(url, sizeof url, stdin)) /* error */;
/* ... */
} while (*url != '\n');
그것은 매우 간단하다.상태일 때 문자열이 비어 있는지 확인합니다.
strlen 함수를 사용하여 문자열 길이를 확인할 수 있습니다.
#include<stdio.h> #include <string.h> int main() { char url[63] = {'\0'}; do { printf("Enter a URL: "); scanf("%s", url); printf("%s", url); } while (strlen(url)<=0); return(0); }
첫 번째 문자가 '\0'인지 확인합니다.
#include <stdio.h> #include <string.h> int main() { char url[63] = {'\0'}; do { printf("Enter a URL: "); scanf("%s", url); printf("%s", url); } while (url[0]=='\0'); return(0); }
참고하시기 바랍니다.
C:
https://www.javatpoint.com/c-arrayhttpswww..com/c-array
https://scholarsoul.com/arrays-in-c/httpsscholarsoul.com//
C:
https://www.programiz.com/c-programming/c-stringshttpswww.programiz.com//c-strings
https://scholarsoul.com/string-in-c/httpsscholarsoul.com//
https://en.wikipedia.org/wiki/C_string_handlinghttpsen.wikipedia.org/wiki/
확인 및 요약:
- c c c c c c c c c c c c c 。
url[0] == '\0'
strlen(url) == 0
strcmp(url, "") == 0
- C " " " Not Emptempty '
url[0] != '\0'
strlen(url) > 0
strcmp(url, "") != 0
언급URL : https://stackoverflow.com/questions/15485179/how-to-check-if-c-string-is-empty
'sourcecode' 카테고리의 다른 글
vue-test-utils 설정 typeError: 문자열에 속성 '_Ctor'를 생성할 수 없습니다. (0) | 2022.08.16 |
---|---|
'XMLHttpRequest has blocked by CORS policy' 수정 방법 리다이렉트에서는 1개의 루트만 사용할 수 없습니다. (0) | 2022.08.16 |
사용 정상 회의 버튼을 recaptcha 사용자 Vuejs의 반응에 따라. (0) | 2022.08.16 |
다형성 vs 오버라이드 vs 오버로드 (0) | 2022.08.16 |
스낵바 Vuetify - 시간 초과 후 메서드 재정의 (0) | 2022.08.16 |