programing

문자 포인터에 malloc을 사용할 때

powerit 2023. 9. 10. 12:41
반응형

문자 포인터에 malloc을 사용할 때

저는 특히 말로콘 문자 포인터를 언제 사용해야 하는지에 초점을 맞추고 있습니다.

char *ptr;
ptr = "something";
...code...
...code...
ptr = "something else";

이처럼 사소한 것에 malloc이 필요할까요?그렇다면 왜?그렇지 않다면 문자 포인터는 언제 필요합니까?

다른 사람들이 지적한 바와 같이, 단지 다음을 수행하기 위해 malloc을 사용할 필요는 없습니다.

const char *foo = "bar";

그 이유는 바로 그것 때문입니다.*foo 포인터 — 초기화할 때foo당신은 문자열의 복사본을 만드는 것이 아니라, 단지 어디에 있는지를 가리키는 것일 뿐입니다."bar"실행 파일의 데이터 섹션에 저장됩니다.포인터를 원하는 만큼 자주 복사할 수 있지만, 항상 해당 문자열의 단일 인스턴스를 가리킵니다.

그래서 malloc을 언제 사용해야 합니까?평소에 사용하시는strdup()백그라운드에서 malloc을 처리하는 문자열을 복사합니다. 예를 들어.

const char *foo = "bar";
char *bar = strdup(foo); /* now contains a new copy of "bar" */
printf("%s\n", bar);     /* prints "bar" */
free(bar);               /* frees memory created by strdup */

자, 이제 마침내 당신이 사용하고 있다면 말로크를 원할 수도 있는 사건에 대해 알아보겠습니다.sprintf()아니면, 더 안전하게snprintf()새 문자열을 생성/포맷합니다.

char *foo = malloc(sizeof(char) * 1024);        /* buffer for 1024 chars */
snprintf(foo, 1024, "%s - %s\n", "foo", "bar"); /* puts "foo - bar\n" in foo */
printf(foo);                                    /* prints "foo - bar" */
free(foo);                                      /* frees mem from malloc */

malloc프리 스토어에 메모리를 할당하기 위한 것입니다.수정하지 않으려는 문자열 리터럴이 있는 경우 다음이 좋습니다.

char *literal = "foo";

그러나 수정이 가능한 경우 입력 라인을 유지하기 위한 버퍼로 사용하는 등의 방법을 사용합니다.malloc:

char *buf = (char*) malloc(BUFSIZE); /* define BUFSIZE before */
// ...
free(buf);

사용하다malloc()컴파일 시간 동안 필요한 메모리의 양을 알 수 없는 경우.읽기 전용 문자열이 있는 경우 다음을 사용할 수 있습니다.const char* str = "something";. 문자열은 읽기 전용 메모리 위치에 저장되어 있으므로 수정할 수 없습니다.반면 컴파일러 시간 동안 문자열을 알고 있다면 다음과 같은 작업을 수행할 수 있습니다.char str[10]; strcpy(str, "Something");여기서 메모리는 스택에서 할당되며 str을 수정할 수 있습니다.세 번째는 malloc을 이용해서 배분하는 것입니다.컴파일 시간 동안 문자열의 길이를 모른다고 가정합니다.그럼 할 수 있겠군요.char* str = malloc(requiredMem); strcpy(str, "Something"); free(str);

단일 문자 또는 정수의 경우 malloc, 동적 배열의 경우 calloc.pointer = ((int *)malloc(sizeof(int)) == NULL), 당신은 괄호 안에서 산술을 할 수 있습니다.malloc하지만 당신은 당신이 사용해야 하기 때문에 하지 말아야 합니다.calloc다음과 같은 정의가 있습니다.void calloc(count, size)즉, 저장할 항목의 개수와 데이터의 크기를 의미합니다.int,char기타.

컴파일 시간에 문자열의 크기가 결정되지 않을 때마다 malloc(또는 이와 동등한 방법)으로 메모리를 할당해야 합니다.당신의 경우 컴파일 시 문자열의 크기("something"의 크기)와 ("something"의 크기("something")를 알고 있습니다.

언급URL : https://stackoverflow.com/questions/1788655/when-to-use-malloc-for-char-pointers

반응형