문자열 종료를 무효
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
'programing' 카테고리의 다른 글
참조 어셈블리 PDB 및 XML 파일이 출력에 복사되지 않도록 방지 (0) | 2023.10.11 |
---|---|
팬더 데이터 프레임 열의 몇 개 값을 다른 값으로 바꿉니다. (0) | 2023.10.11 |
개인 구성원 데이터 직렬화 중 (0) | 2023.10.06 |
레코드 또는 업데이트가 이미 있는 경우 삽입하는 방법은 무엇입니까? (0) | 2023.10.06 |
프로그래밍 방식으로 Excel 2007 시트 만들기 (0) | 2023.10.06 |