programing

str==의 차이점은 무엇입니까?C의 특수 및 str[0]=='\0'은 무엇입니까?

sourcejob 2022. 12. 24. 17:40
반응형

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는 입니다.NULL
  • str[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

반응형