포인터를 사용하여 문자열 변수를 만들 수 있습니까? 그래서 char x [4] = "aaa"처럼 매번 크기를 넘을 필요가 없습니까?ANSI C - 문자열 포인터의 크기를 계산하십시오.
어떻게 이러한 문자열의 크기를 얻을 수 있습니까?
포인터로 빈 문자열을 초기화 할 수 있습니까?
포인터를 사용하여 문자열 변수를 만들 수 있습니까? 그래서 char x [4] = "aaa"처럼 매번 크기를 넘을 필요가 없습니까?ANSI C - 문자열 포인터의 크기를 계산하십시오.
어떻게 이러한 문자열의 크기를 얻을 수 있습니까?
포인터로 빈 문자열을 초기화 할 수 있습니까?
C의 문자열은 널 종료 자 문자 (\0
)로 끝납니다. 당신의 변수가 예 (초기화하거나 잘 형성되지 않은 경우 NULL
를 됨으로써,
char *x = "hello"; // automatically appends a null terminator
int len = 0;
while (x[len] != '\0') {
len++;
}
을 : 당신이 당신의 포인터 변수에 저장된 잘 구성된 문자열이있는 경우, 따라서이 문자를 검색하여 길이를 확인할 수 있습니다) 당신은 분명히이 접근법을 취할 수 없다; 그러나 대부분의 함수는 일반적으로 문자열 이이라는 가정하에 작성됩니다. 그 이유는 더 빠른 코드를 생성하기 때문입니다.
포인터를 초기화하려면 NULL
, 유효한 주소 (예 : char *x = &someCharVar
) 또는 문자열 상수 (예 : char *x = "hello"
)의 세 가지 옵션이 있습니다. 문자열 상수를 사용하는 경우 상수가 아닌 문자열의 주소로 다시 할당하지 않는 한 은 불투명입니다. char
은 항상 정확히 1 바이트로 정의되어 있기 때문에 sizeof(char)
가 여기에 불필요하다고
// Get enough space for 24 characters plus null terminator
char *myString = (char*) malloc(25 * sizeof(char));
strcpy(myString, "some text"); // fill the new memory
fgets(myString, 25, stdin); // fill with keyboard input
참고. 그러나 다른 데이터 유형을 사용하는 경우에는 습관을 유지하는 것이 좋으며, 의도를 명확하게하여 코드 자체를 문서화하는 데 도움이됩니다.
char str[] = "This is a test";
이 (char
의 15 요소의 배열로 크기를 str
을 만들 것입니다 : 당신은 문자열 리터럴과 char
의 배열을 초기화하는 경우
malloc과 같은 초기화 예제를 제공해 주시겠습니까? – user1615069
@ user1615069 예제를 업데이트했습니다. –
+1을 더하는 것이 더 좋습니다 : const char * x = "hello"; 그래서 당신은 역 참조 된 x를 할당 할 수 없습니다. –
, 당신은 크기를 지정할 필요가 없습니다 initiliazer의 길이 (0 터미네이터 포함)에서 가져온 문자열 리터럴의 내용을 복사합니다. 리터럴
문자열 유형 'char
의 N 소자 어레이 "(const char
C++에서)의 배열 식이다. 위와 같이 선언에서 배열을 초기화하는 데 사용되거나 연산자 sizeof
또는 단항 &
연산자 인 경우를 제외하고 유형 "T
"의 표현식은 "포인터 유형"의 표현식으로 변환됩니다 T
"이고 표현식의 값은 배열의 첫 번째 요소의 주소가됩니다.
당신이 작성하는 경우
const char *str = "This is a test";
표현을 "포인터 char
에"유형 "char
의 15 요소의 배열"에서 변환됩니다 "이것은 테스트입니다"하고, 식의 값은 주소입니다 변수 str
에 기록됩니다.
문자열 리터럴의 내용을 수정하는 동작은 정의되지 않음 입니다. 정의되지 않음; 일부 플랫폼에서는 문자열 리터럴을 읽기 전용 메모리에 저장하지만 일부 플랫폼에서는 그렇지 않습니다. 어떤 것은 같은 문자열 리터럴을 여러 번 하나의 인스턴스에 매핑하고 다른 인스턴스는 매핑하지 않습니다. 항상 문자열 리터럴을 수정할 수없는 것으로 처리하는 것이 가장 좋습니다. 따라서 str
을 char *
대신 const char *
으로 선언했습니다.
strlen
사용
char str[] = "This is a test"; // or const char *str = "This is a test";
size_t len = strlen(str); // or strlen("This is a test");
이 0 터미네이터 (그러나 포함하지 않음)까지 문자열의 문자 수를 반환합니다; 이 가 당신에게 버퍼 경우의 크기를 제공하지 않습니다
char str[] = "This is a test";
size_t len = sizeof str; // or sizeof "This is a test"
참고 : strlen("This is a test")
문자열을 포함하는 버퍼의 크기를 얻으려면 14
를 반환합니다, 당신은 sizeof
연산자를 사용합니다 당신은이 경우
const char *str = "This is a test";
로, sizeof str;
만, 당신은 POI하지 문자열을 char *
의 크기를 제공, 포인터로 str
선언 nts.
조금 더 설명해 주시겠습니까? – mathematician1975
"크기를 전달하십시오"라고 말하면 함수 매개 변수로 가정합니까? – WhozCraig
2 개의 맥주 + 많은 잘라 붙이기, 롤, 죄송합니다, 이미 편집 : P – user1615069