C 문자열 배열에 메모리를 할당하려고합니다. 문자열이 MAX_STRING_LENGTH
자 이내로 들어간다는 것을 보증 할 수 있지만 배열에 얼마나 많은 문자열이 있는지 컴파일 타임에 알지 못합니다 (동적으로 계산 됨). 코드를 사용할 때 ...임의 길이의 고정 길이 C 문자열 배열에 메모리를 할당하는 방법
char *strings[MAX_STRING_LENGTH] = malloc(sizeof(char *) * numstrings);
... 컴파일러는 유효하지 않은 초기화 프로그램이라고 불평합니다. 코드를 사용할 때 ...
char strings[MAX_STRING_LENGTH][] = malloc(sizeof(char *) * numstrings);
... 컴파일러는 불완전한 요소 유형에 대해 불평합니다. 내가 여기서 잘못하고있는 것은 무엇이며 어떻게이 배열에 메모리를 할당 할 수 있습니까?
char **strings = malloc(sizeof(char*) * numstrings);
for (int i = 0; i < numstrings; i++)
strings[i] = malloc(MAX_STRING_LENGTH);
하나의 덩어리에 모두 할당하는 것도 가능은 다음 할당 (쉽게 확보하게) : 그것은 진정으로 동적 인 경우
당연히, 나는 항상'char **'를위한 메모리를 할당하고 각 문자열을 반복하고'char * '를 할당 할 수 있습니다. 그러나 나는 피하려고 노력하고있는 반복과 할당입니다. –
오, 그래서 당신은 미리 문자열의 수를 알고 있습니다 (즉, 할당 전에). 그런 다음 당신이 말한 것처럼 'char **'를 만들고 반복하십시오. – houbysoft
@houbysoft "사전에"나는 컴파일 시점을 의미했습니다. 그에 따라 질문을 업데이트했습니다. –