str==의 차이점은 무엇입니까?C의 특수 및 str[0]=='\0'은 무엇입니까?
에 대해 str == NULL ★★★★★★★★★★★★★★★★★」str[0] == '\0':
int convert_to_float(char *str, double *num)
{
if ((str == NULL) || (str[0] == '\0'))
return(-1);
*num = strtod(str, (char **)NULL);
return(0);
}
Linux에서 gcc를 사용하고 있습니다.
str==NULL【NULL】
str[0]=='\0'에 문자열의 길이가 제로인지 여부를 나타냅니다.
이 코드에서 테스트는 다음과 같습니다.
if ((str == NULL) || (str[0] == '\0'))
는, NULL 또는 제로 길이의 케이스를 검출하기 위해서 사용합니다.
여기서 단락은 중요한 역할을 합니다.이 테스트의 요점은 다음 사항을 확인하는 것입니다.str1991 의 한 c 입니다.
- 테스트입니다.
str[0] == '\0'하는 것은, 「」가 있는 경우 입니다.strNULL이 . - 첫
str == NULL일찍 일어나야 할 때str특수한 절차입니다.
아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아...str실제로는 "문자열"이 아니라 메모리 위치에 대한 포인터입니다.char이치노력하다
다음으로 컴파일러가 이 모든 항목을 어떻게 보는지 이해해야 합니다.그 유형을 살펴보겠습니다.
str은 「」입니다.char *a, a, a)에)char)"NULL는 늘 상수입니다(내 에서는 이는 "NULL Pointer constant"((void*)0))'\0'상수입니다int은 하지 으로 '어느 정도'가 한 상황에서 일반적으로 이 명령어는 다음 명령어를 필요로 하는 상황에서 사용됩니다.char표시)
「 」를 .*char * ★★★★★★★★★★★★★★★★★」void *이는 컴파일러가 포인터 타입임을 나타냅니다(이 타입의 변수는 값을 유지하지 않고 포인터를 가리킬 뿐입니다).가 ""를 했을 때char *str 하면, '어쩌면 안 된다' 이런 걸 걸 알수 있어요*str ★★★★★★★★★★★★★★★★★」str[0]다시 그건 나중에 다시 얘기하죠
요.strC 프로그램에서 컴파일러는 "str"라는 변수가 메모리 위치에 저장되는 것을 알고 있습니다. 0x0001로 하다생성된 코드는 0x0001로 이동하고 값을 가져옵니다....
str + 1
그런 다음 컴파일러는 다음과 같은 코드를 생성합니다.
fetch the value from where str is stored (0x0001)
add 1 to that value
그건 당신이 알고 있을 거라고 확신해요이제 이 행이 무엇을 의미하는지 알 수 있습니다.
str == NULL
★★NULL는 늘 상수이며, 이은 "null"이 "null"인지 여부를 합니다.str는 늘 포인터(즉, 아무것도 가리키지 않는 포인터)입니다.
따라서 컴파일러는 일반적으로 다음과 같은 코드를 생성합니다.
fetch the value from where str is stored
check if that value is 0
에게 「아까는 없다」라고 말한 것을 .str는 실제로 포인터 타입입니다.그래서 우리는 다음과 같이 쓸 수 있습니다.
*str
그 결과 컴파일러는 다음과 같이 생성됩니다.
fetch the value from where str is stored
now use that value as a memory address and fetch what is stored there
따라서 str이 0x0200을 유지하면 메모리주소 0x0200에서 값을 얻을 수 있습니다.컴파일러는 문자열이 실제로 저장되어 있는지 여부에 대해서는 별로 신경 쓰지 않습니다.
( 있다고str[0] is is is is is와 *str 일이 있는지 할 수 무슨 일이 일어나고 있는지 쉽게 설명할 수 있습니다.)
그럼 이건 어때?
*str == '\0'
즉, 이 선은 실제로 다음과 같습니다.
*str == (char) 0
그 결과 컴파일러는 다음을 생성합니다.
fetch the value from where str is stored
now use that value like a memory address and fetch the char that is stored there
check if the value of that fetched char is 0
요약:
- ★★
str == NULL는 포인터가 """ 아닌지를 .str아무것도 가리키고 있지 않다. - ★★
*str == '\0'는 포인터가 """ 아닌지를 .str는 빈 스트링을 가리키고 있습니다(실제로 제로인 메모리 위치를 가리키고 있습니다).
'첫 번째 늘의 첫 번째 가 ''''로 되어 '문자열'은 '문자열'로 되어 있습니다따라서 문자열의 첫 번째 문자가'\0'을 참조해 주세요.
본질적으로
str == NULLstr는 입니다.NULLstr[0] == '\0'str는 0 0 입니다.
결합할 때 NULL인지 비어 있는지 확인합니다.이를 통해 함수는 메서드 시작 시 빈 데이터의 두 형식을 모두 제거할 수 있습니다.
str == NULL tonowhere) checking str null NULL ( nowwhere ) 。
str[0] == '\0'(아닌 ) 첫가 있습니다만 해당). (NULL-pointer는 0-terminated str이 있습니다.
str==NULL이 '아니다'인지 .NULL.
*str=='\0'에 문자열의 길이가 제로인지 여부를 나타냅니다.
주의: 이 답변은 Mystricty의 15초 답변에 대한 플레이입니다.str=='\0' 3~되지 않고 물론 처음 3~4분 동안 변경된 내용은 표시되지 않고 ಠ_ಠ를 수정했습니다.
str == NULL은 "str points to memory address 0"(또는 시스템에서 NULL인 모든 주소)을 의미합니다.일반적으로 이것은 문자열이 전혀 없음을 의미합니다.
str[0] == '\0'은 "str의 첫 번째 문자가 문자 0"을 의미합니다(문자열의 끝을 표시).끈이 있는데 비어 있다는 뜻이죠빈 컵과 전혀 컵이 없는 컵을 생각해 보세요; 같은 생각입니다.
에서는 '하다'라고 쓸 수 .str == null »str == ""두 가지 다른 의미가 있어요.NULL 포인터를 사용하려고 하면 프로그램이 크래시되므로 C의 차이를 이해하는 것이 특히 중요합니다.
str == NULL포인터가 Null(문자열의 주소는 Null)이기 때문에 문자열의 REFERENCE가 없음을 의미합니다.
str[0] == '\0' 인 합니다.--는 0 인 스트링을 의미합니다.
이 설명에서 틀린 점이나 의문점이 있으면 알려주세요.
str == NULL
str이 주소 = 포인터가 비어 있지 않음을 나타냅니다.
★★★★★★★★★★★★★★★★★」str[0] == '\0', 이 은 첫 문자(str값이합니다.str은 스트링의 마지막을 의미합니다.str은 스트링의 마지막 문자, "str[0]는 0(ASCII)"입니다.비어있네요.str에는첫입니다.첫 번째 문자가 끝 문자입니다)
1 ->str == NULL포인터2 -> str -> NULL 2 -> NULL 합니다.str[0] == '\0'0c style 0 의 c stringstr' 인지를 합니다.
그래서 이렇게 해서if ((str == NULL) || (str[0] == '\0'))OR 연산자의 단락은 문자열이 아무것도 가리키지 않거나 빈 문자열을 가리키지 않도록 하기 때문에 화면에 표시됩니다.
C#에 상당하는 것은 다음과 같습니다.
if (string.IsNullOrEmpty(str))
{
}
간단한 의미는 문자열이 NULL인지 빈 문자열인지를 나타냅니다.
언급URL : https://stackoverflow.com/questions/8321459/what-is-the-difference-between-str-null-and-str0-0-in-c
'programing' 카테고리의 다른 글
| Python에서의 Bash 명령어 실행 (0) | 2022.12.24 |
|---|---|
| 클론 방식을 올바르게 재정의하려면 어떻게 해야 합니다. (0) | 2022.12.24 |
| 엔티티 프레임워크가 "같은 키를 가진 항목이 이미 추가되었습니다"를 슬로우합니다. (0) | 2022.12.24 |
| MySQL SELECT가 최근 며칠 동안입니까? (0) | 2022.12.13 |
| XAMPP에 비해 MariaDB Docker 컨테이너에 SQL 쿼리 삽입 속도가 매우 느립니다. (0) | 2022.12.13 |