-
06-07-2019 - |
문제
한 차원에서만 역동적 인 다차원 배열이 필요합니다 ...
나는 길이가 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
처음으로 널 포인터를 통과했을 때.
다른 팁
당신은 당신의 요구를 충족시키는 컨테이너가있는 라이브러리를 찾는 것이 훨씬 더 잘 될 것입니다. 최악의 경우, 훨씬 더 나은 라이브러리를 사용하지 않으면 두 개의 별도 배열이있을 수 있으며 각 배열은 쌍의 절반을 고정시킬 수 있습니다.
제휴하지 않습니다 StackOverflow