문제

한 차원에서만 역동적 인 다차원 배열이 필요합니다 ...
나는 길이가 10 (또는 작은) char의 길이가 있지만 가변적인 수의 "쌍"을 가진 한 쌍의 문자열을 저장해야합니다.

내 생각은 이것이었습니다

char (*instrucao)[2][10];

2x10 배열의 숯에 대한 포인터를 제공하지만 이와 같은 일을 할 때 제대로 작동하지 않습니다.

char strInstrucoes[117], *conjunto = calloc(21, sizeof(char));
instrucao = calloc(1, sizeof(char[2][10]));
conjunto = strtok(strInstrucoes,"() ");
for(i = 0; conjunto != NULL; i++){
    realloc(instrucao, i+1*sizeof(char[2][10]));
    sscanf(conjunto,"%[^,],%s", instrucao[i][0], instrucao[i][1]);
    printf("%s | %s\n", instrucao[i][0], instrucao[i][1]);
    conjunto = strtok(NULL, "() ");
}

was strInstrucoes ~처럼 (abc,123) (def,456) (ghi,789), 나는 다음과 같이 각각 2 쌍의 3 줄의 매트릭스를 사용하지 않습니다.

abc | 123
def | 456
ghi | 789

그러나 대신 이것은 내가 얻는 것입니다.

abc | 123
def | 45def | 45de
ghi | 789

이것을하는 올바른 방법은 무엇입니까? 감사!

도움이 되었습니까?

해결책

포인터에 새 주소를 할당해야합니다 realloc 보고

instrucao = realloc(instrucao, (i+1)*sizeof(char[2][10]));

오류 확인의 경우 새 포인터에 할당하고 확인하고 싶을 수도 있습니다. NULL. 또한 Parens에 주목하십시오 - 기본적으로 방금 추가했습니다 i 필요한 크기를 곱하는 대신. 쉽게 감독합니다.

초기가 필요하지 않습니다 calloc. 초기화 instrucao 에게 NULL, 그리고 Realloc은처럼 행동 할 것입니다 malloc 처음으로 널 포인터를 통과했을 때.

다른 팁

당신은 당신의 요구를 충족시키는 컨테이너가있는 라이브러리를 찾는 것이 훨씬 더 잘 될 것입니다. 최악의 경우, 훨씬 더 나은 라이브러리를 사용하지 않으면 두 개의 별도 배열이있을 수 있으며 각 배열은 쌍의 절반을 고정시킬 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top