programing

문자열 종료를 무효

oldcodes 2023. 10. 11. 20:57
반응형

문자열 종료를 무효

gcc 4.4.4 c89

문자열을 null로 종료하는 표준 방법은 무엇입니까?사용할 때.NULL경고 메시지가 왔습니다.

*dest++ = 0; 
*dest++ = '\0'; 
*dest++ = NULL; /* Warning: Assignment takes integer from pointer without a cast */

소스 코드:

size_t s_strscpy(char *dest, const char *src, const size_t len)
{
    /* Copy the contents from src to dest */
    size_t i = 0;
    for(i = 0; i < len; i++)
    *dest++ = *src++;

    /* Null terminate dest */
     *dest++ = 0; 

    return i;
}

또 다른 질문:나는 일부러 null이 끝나는 줄을 언급했습니다.그러나 목적지의 내용물은 여전히 정확하게 출력했습니다.이 함수의 호출자는 문자열의 길이를 포함하여 보낼 것입니다.NULL아니, 아니, 즉.strlen(src) + 1아니면stlen(src).

size_t s_strscpy(char *dest, const char *src, const size_t len)
{
    /* Copy the contents from src to dest */
    size_t i = 0;
    /* Don't copy the null terminator */
    for(i = 0; i < len - 1; i++)
    *dest++ = *src++;

    /* Don't add the Null terminator */
    /* *dest++ = 0; */

    return i;
}

첫 번째 질문:저는 폴 R의 코멘트를 끝으로 종료하겠습니다.'\0'. 하지만 그 가치는0그 자체도 잘 작동합니다.취향의 문제.그러나 MACRO를 사용하지 마십시오.NULL포인터를 위한 것입니다.

두 번째 질문에 대해:문자열이 종료되지 않은 경우\0, 문자열 뒤에는 메모리에서 인쇄할 수 없는 문자가 따라오기 때문에 예상 출력을 인쇄할 수도 있습니다.하지만 이것은 정말 끔찍한 버그입니다. 예상하지 못했을 때 폭발할 수도 있기 때문입니다.항상 문자열을 종료합니다.'\0'.

comp. lang.c FAQ: http://c-faq.com/null/varieties.html

본질적으로:NULL(null 포인터에 대한 전처리기 매크로)가 다음과 같지 않습니다.NUL(null 문자).

주의: NULL은 주로 포인터에 사용되는 매크로입니다.문자열을 종료하는 표준 방법은 다음과 같습니다.

char *buffer;
...
buffer[end_position] = '\0';

이 방법(아래)도 작동하지만 int/short/long 배열에 정수 값을 할당하는 것과 문자 값을 할당하는 것은 큰 차이가 없습니다.그래서 첫 번째 버전을 선호하고 개인적으로 더 마음에 듭니다.

buffer[end_position] = 0; 

'\0'이 가야 할 길입니다.문자열에서 원하는 것으로 null 값을 가지는 문자입니다.

C/C++에서 null terminated string이라고 하면 정말로 'zero terminated string'을 의미합니다.NULL 매크로는 종료 문자열에 사용하기 위한 것이 아닙니다.

언급URL : https://stackoverflow.com/questions/2911089/null-terminating-a-string

반응형