2013-05-05 2 views
0

모두에게 좋은 날,char 포인터의 다차원 배열

알아낼 수없는 일이 있습니다. 내가 포인터의 다차원 배열 생성 :

char *listA[5000][2]; 

특정 상태에서를, 나는 특정 문자열이 배열 안에 저장됩니다합니다. 이들은 단순한 변수의 일반적인 문자열이고 문자열의 배열 안에 들어있는 또 다른 문자열입니다.

listA[j][0]=strMix; 
listA[j][1]=ingredients[i]; 
j++; 

J은 물론, 모든 추가 증가되고, 로우이다.

결과는 모든 행에 대해 두 개의 열을 포함하고 하나는 성분을, 다른 하나는 상대 strMix를 포함하는 배열이어야합니다.

문제는 내가하려고 할 때이 다차원 배열 읽을 수 있다는 것입니다 :

printf("%s", listA[0][1]); // the ingredient 

항상 정확,하지만 :

printf("%s", listA[0][0]); // the strMix code 

은 항상 잘못; 정확하게 모든 행에 대해 마지막 strMix를 읽습니다.

나는 열의 순서를 바꾸려고 노력했다. 그리고 나의 큰 놀라움으로, 문제는 항상 strMix를위한 것이었고 성분들 [i] 문자열을위한 것이 아니다.

strMix 열은 listA에 쓰고 읽을 때만 정확합니다. 물론, 나는 말할 것입니다. 예를 들어

:

printf("Current: %s vs Previously: %s",lista[j][0], lista[j-1][0]); 

들은, 동일한 모든 J에 대한 마지막 strMix 동일 읽고.

메모리 나 다차원 배열의 포인터에 관한 정보가 있으면 간단히 말씀 드리지만 조언 해 주시면 감사하겠습니다.

시간 내 주셔서 감사합니다. fdt.

+1

여기에 표시된 모든 내용이 합리적인 것처럼 보입니다.이 배열을 초기화하는 코드를 보여주십시오. 아마 당신의 문제가있는 곳일 겁니다. –

+0

이것은 일반적인 문제입니다. 종종 문제는 새로운 문자열이 읽은 각 항목에 할당되지 않는다는 것입니다. –

+0

포인터 strMix를 설정하는 곳 또는 포인터가 가리키는 배열의 내용을 표시하십시오. –

답변

2

이 배열에는 문자열을 저장하지 않습니다. 포인터를 저장하고 있습니다.

이 문을 복사 주소가 아닌 문자열 :

listA[j][0]=strMix; 

당신이 문자열을 복사 할 경우

을 수행 할 수 있습니다 중 하나

  • 를 사용하여 문자열을 저장하는 char 배열. 일부 문자열의 경우 너무 많은 메모리를 사용할 수 있습니다.다른 사람들에게는 충분하지 않을 수도 있습니다.
  • 문자열에 주소를 저장하는 char * 배열을 사용합니다. 은 참조 된 각 문자열에 대해 별도의 메모리를 할당합니다.

문자열을 복사하는 경우 strncpy()을 안전하지 않은 strcpy()으로 지정하는 것이 좋습니다.

+0

입니다. 주소를 사용하여 strMix를 포인터로 가리키고 listA에 전달하려고 시도했지만 문제는 동일합니다. strMix는 실제로 char 배열입니다. – FdT

+0

strmix를 단독으로 사용하는 경우, strmix를 char로 선언했는지 여부에 상관없이 값은 주소입니다. char * strmix. 만약 당신이 그것을 선언하고 설정하는 코드라면, 수정은 매우 간단해야합니다. –

+0

알 겠어! 나는 그것을 완전히 얻는다. 해결책은 당신의 도움에서 영감을 얻었습니다. 문제는 실제로 strMix (char strMix [20]) 선언입니다. 'ingredients'는 (성분들 [TOT] [TOT] : char의 2D 배열)입니다. 나는 strMix에 대해서도 char 배열을 만들고, 올바르게 사용하기 위해 코드를 조작했다. 그러나 이제는 작동한다. 고마워. – FdT

1

C 또는 C++입니까? 어쩌면 할당 대신에 :

listA[j][0]=strMix; 

strcpy 함수를 사용해야합니까?

strcpy (listA[j][0], strMix); 
+0

답변 해 주셔서 감사합니다. strcpy와 strncpy로 시도했지만 프로그램이 충돌합니다. 대답은 C. – FdT