나는 C++과 프로그래밍 전반에 초보자라는 것을 말해야 만합니다. 나는 그 지점으로 곧장 갈 것이다. 모든 문자의 문자열을 문자 배열 (char * 포인터가 아니라 배열)에 할당 할 수 있는지 궁금합니다. 그게 어떤 메모리 주소를 위반합니까? 내가 배우는 책은 그것에 대해 아무 말도하지 않는 것 같습니다. 나는 Google에서도 아무것도 찾을 수없는 것 같습니다.임의의 크기의 문자열을 char 포인터에 할당
답변
char
문자열의 길이는 문자열의 NUL
(0) 바이트로 실행될 때 결정되기 때문에 포인터는 길이가 임의의 문자열을 가리킬 수 있습니다. 이 방법으로 문자열을 저장하면 C 문자열이됩니다. 예를 들어 :
const char* str = NULL; // at this point,
// doesn't point to anything (not even a string)
str = ""; // valid
str = "a"; // valid
str = "hello"; // valid
str = "farewell, cruel world"; // valid
다소 긴 문자열이 일부 읽기 전용 메모리 위치를 덮어 쓰려고하지 않습니까? – T0rm3nt0R
내 마음에 떠오르는 또 다른 질문은 왜 동적 메모리 운영자가 포인터 변수가 차지할 크기를 결정하기 위해 새롭고 삭제 될 것이라고 생각 하는가? 마치 동적 메모리를 사용하지 않고도 원하는만큼 정확하게 포인터를 만들 수있는 것처럼 보입니다. 내가 배우고있는 책은 새로운 것을 사용하고 포인터는 꼭 필요한만큼 커야한다. 이것은 내가 당신에게서 이해할 수있는 것에 따라 정말로 이상하게 보인다. – T0rm3nt0R
@ T0rm3nt0R, Seth의 예제에있는 모든 문자열은 사용자가 요구하는 경우 읽기 전용 메모리에있을 가능성이 큽니다. 문자열이 사용자 입력에서 나왔다면 동적으로 문자열을위한 공간을 할당하는 것이 유용 할 것입니다. –
당신은 당신의 문자 포인터가 동적으로
char *str;
말 C 문자열을 만들려고합니다. 이 포인터는 문자열의 첫 번째 문자를 가리키는 데 사용됩니다. 문자열은 메모리에있는 일련의 연속 문자 (바이트)입니다. 우리는 무엇을 메모리에이를 달성하기 위해 :
str -> +---+---+---+---+---+----+
| H | E | L | L | O | \0 |
+---+---+---+---+---+----+
주에게 마지막 바이트 -이 바이트의 값은 0과 null 문자 전화 - 그것은 문자열의 끝을 나타내는 우리가있을 때 알고 easilty 한 수 끝까지 오십시오.
str
값을 지정하면이 메모리가 할당됩니다. C++에서이 새로운이
str = new char[6];
참고 같이 new operator
수행되는 두 가지 버전의 새로운 [] 및 새로운 못한 - 하나가 다른 하나의 객체를 할당하는 오브젝트의 배열을 할당하는 것이다. new []로 할당 한 경우 delete []를 사용하십시오. 마찬가지로 new/delete를 사용해야합니다. 새 문자 []와 삭제 문자를 혼합하지 말고 [] 문자로 새 문자를 병합하지 마십시오.
이렇게하면 6 자의 배열이 할당됩니다. 문자열에 문자를 넣으려면 우리가 차갑게 처리해야합니다.
str[0] = `H`;
str[1] = `E];
...
str[5] = 0;
그러나 이것은 지루할 것입니다. 대신 우리는 우리를 위해이 일을 strcpy을 사용할 수 있습니다 : 그것은 모든 널 문자에 대해 알고
strcpy(str, "hello");
. 이러한 유형의 문자열에서 작동하는 다양한 함수가 있습니다. string
이것은 C 문자열입니다. 옛날 옛적에 누군가 C++라고 불리는이 새로운 언어를 발명했습니다. 이 언어는 물건이라고하는 다른 아이디어를 사용하여이 물건을 훨씬 쉽게 만듭니다. 표준 템플릿 라이브러리 (또는 STL)를 살펴 봐야합니다. 이 문자열에 대한 참고 사항은 string에서 찾을 수 있습니다. `유효 여기에이
- 1. char 포인터에 char 저장
- 2. 문자열 포인터에 값 할당
- 3. 포인터에 할당 된 malloc
- 4. 포인터에 대한 포인터는 무엇을합니까? char **
- 5. 임의의 크기의 튜플은
- 6. 클래스 생성자에서 포인터에 대한 메모리 할당
- 7. C에서 문자 포인터에 문자열을 할당하는 방법은 무엇입니까?
- 8. 문자열을 char 배열로 복사
- 9. const char 포인터 할당
- 10. 격자를 임의의 크기의 사각형으로 분할
- 11. 문자열을 다른 문자열에 할당
- 12. C++에서 임의의 크기의 배열을 교체 할 수 있습니까?
- 13. 크기를 모르는 경우 어떻게 char 포인터에 메모리를 할당합니까?
- 14. "할당 폐기 'CONST'한정자"const가 아닌 포인터에 오류가 다음 함수에서
- 15. epoll_wait에서 "events"포인터에 할당 할 메모리 양
- 16. Char List에서이 문자열을 변환해야합니다.
- 17. 문자열을 char *에 연결하십시오.
- 18. 변환 표준 : : 문자열을 CHAR *
- 19. char 배열 할당 C++에서
- 20. 문자열에 부호없는 char * 버퍼 할당
- 21. C++에서 Char * 재 할당
- 22. 문자열을 무언가에 할당
- 23. 임의의 문자열을 파이썬
- 24. Ruby에서 임의의 문자열을 XML로
- 25. jquery를 사용하여 다양한 크기의 임의의 이미지 표시
- 26. CSS : 임의의 크기의 사각형 테셀레이션 벽 만들기
- 27. 임의의 크기의 사각형을 표면에 배열하는 알고리즘?
- 28. recvfrom - 임의의 크기의 구조체를 받고 있습니까?
- 29. 임의의 크기의 수학 벡터에 대한 하나의 클래스
- 30. 장고에서 임의의 단어에 값을 할당
'const를 숯불 *의 PTR = "모든 크기의 문자열을"도움이 STL
희망에 대한 참조를입니다 - 거기 STL에서 케이크의 많은입니다. 문자열 리터럴에 대해 전체 읽기 전용 위치를 차지하지 않는 한. – Mahesh
문자열이 너무 길면 오류가 발생한다는 의미입니까? 포인터가 읽기 전용 메모리 위치를 가리키는 경우입니다. – T0rm3nt0R
"메모리 주소 위반"의 의미는 무엇입니까? –