수업 중 하나에 대한 숙제 질문에 답변해야합니다. 특히, C의 특정 배열이 문자열로 간주되는지 여부를 말해야합니다. 이 기사 ( https://www.geeksforgeeks.org/strings-in-c-2/ )를 기반으로 문자열은 끝에 null 종결자가있는 문자 배열이라는 것을 알고 있습니다.
내 주요 끊기는 다음과 같은 배열에 대해 묻는 질문의 일부입니다.
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
이것은 분명히 끝에 종료 문자가있는 문자 배열입니다. 그러나 중간에 null로 끝나는 문자가 있기 때문에 여전히 문자열로 간주됩니까? 그것이 끈에 어떤 영향을 미칩니 까?
편집 : 의견을 바탕으로 질문의 실제 문구를 제공했습니다.
"다음 배열을 strcpy (), strncpy (), strcmp (), strncmp () 및 유사한 문자열 함수에 대한 인수로 사용하기 위해"문자열 "로 간주 할 수있는 것은 무엇입니까?"
편집 : 질문이 모호하게 표현 된 것처럼 (여러 사람이 지적한 것처럼) 교수에게 이메일을 보냈습니다. 누군가 궁금한 점이 있다면 "그렇습니다. 문자열입니다. 열쇠는 널 문자가 있다는 것입니다. 물론 문자열 조작에 영향을 줄 것입니다. 문자열은 널 문자로 끝납니다."
strcmp()
. 문자열 함수를 변경하는 인수로 사용할 수 있는지 여부는 제공되지 않은 추가 요소에 따라 다릅니다.
c1
은 변경 가능하므로 strcpy
소스 문자열을 수용하기에 충분히 크지 않은 한 왜 유효한 대상 인수가되지 않는지 알 수 없습니다 . 그것은 문자열이 아니며 주어진 목적에 적합한 문자열이 아닙니다.
c1
은 특별히 명명 된 모든 함수를 포함하여 모든 표준 라이브러리 (좁은) 문자열 함수에 대한 문자열 인수에 대한 기본 요구 사항을 충족하지만 호출자가 기대하거나 원하는 것이 아닐 수 있습니다 (심지어 도출 될 수있는 정의되지 않은 동작 무시).
char
. 모든 문자 유형 이 가능합니다.
"CS"
몇 바이트의 가비지가 추가 된 문자열이라고 말할 수 있습니다 (이 경우 최종 NUL 문자는 관련이 없습니다). 그러나 "전체"문자열이 아닙니다. -그럼에도 불구하고이 기능 등을 공급하면strcpy
PC가 폭발하지 않습니다. 이러한 기능은 일부만 "보이기"때문"CS"
입니다.