2012-03-11 2 views
0

"string [5] [*]"치수를 갖고 있지만 문제가있는 2 차원 문자열 배열을 만들고 싶었습니다. 나는 같은 것을 할 싶습니다 :# 행이 C로 고정 된 2 차원 배열을 만들었습니다

... 
for(i = 0;i < 5;i++){ 
    char* word = ...; 
    if(strcmp(word,...)){ 
     string[i][j] = (char *) malloc(/*size of word*/); 
     string[i][j] = word; 
     j++; 
    } 
} 

은 "문자열"변수는 i 번째 방향으로 길이 5이어야하고 내가 j 번째 방향으로 필요한만큼 성장하는 것을 허용해야한다.

나는 일을 시도 :

char* string[5]; 

을하지만 작동하지 않습니다. 위의 for 루프는 단순화되었으며 부품은 논리적으로 보이지 않을 수 있습니다.

편집 : 문자열 목록을 5 가지 범주로 정렬하려고합니다. 따라서 n-dimentional 배열은 의미가 정해지지 않은 문자열 (문자가 아님)이 포함 된 5 개의 배열을 보유해야합니다. 이것은 3-dimentional char 배열이라고 가정하지만 그것을 쓰는 방법을 생각하는 데 어려움을 겪고있었습니다. 모든 문자열 [i] [j] 용어가 char 배열을 보유하기를 원합니다. 그래서 string [0] [0]은 "cat"과 같을 수도 있습니다.

+2

malloc()은 성공을 보장하지 않는다는 것을 명심하십시오. NULL을 반환하는지 확인한 다음 오류 조건을 처리해야합니다. – SecurityMatt

답변

2

시도해보십시오. 문제는 각 string[i][j]입니다 상단의 코드에서 또한

char **string; 
string = (char **)(malloc(sizeof(char *) * 5)); 
//malloc the string[i] whenever you need to at what ever size is necessary. 

char 그리고 당신은 아닌 포인터의 malloc 수 없습니다. string[i]은 모두 char *이므로 malloc을 사용해야합니다.

+0

모든 문자열 [i] [j]에 대해 malloc을 원한다면 어떻게해야합니까? 모든 문자열 [i] [j] 용어는 char 배열을 유지합니까? 어떻게 그것을 달성하기 위해 문자열 객체를 작성하겠습니까? "char *** string"이 작동해야합니까? – user972276

+0

당신은 문자열 배열 배열과 같은'char *** '을 사용할 수 있습니다.나는 그것이 올바른 접근법이라고 생각하지 않고 아마 여러개의'char *'또는'char **'로 나누기를 원한다. – twain249

1

이 줄

string[i][j] = ... 

것 두 배로 당신이 char 뭔가를 할당하고 의미 char**, 역 참조. 그 뭔가가 포인터가 발생하면 컴파일러에서 허용하지 않습니다.

string[i] = (char*) malloc(...); 

그리고 다음 2 차원 배열 정의는 당신이 그것을 시도했다 남아있다 : ​​대신

, 나는 당신이 원하는 생각

char* string[5]; 

당신은 이미 알고 있습니다,하지만 난 ' 경우에 따라 몇 가지 다른 메모를 추가합니다. 일반적으로 C 문자열은 =을 사용하여 할당 할 수 없습니다. 대신, 당신이 필요합니다

strcpy(string[i], word); 

둘째, malloc() 오히려 strlen(word)하지만이어야한다 :

strlen(word) + 1 

여분의 바이트가 NUL 종료입니다.

+0

나는 문자열의리스트를 5 개의 카테고리로 정렬하는 것으로 생각한다. 그래서 문자열 배열 (3 차원 문자 배열)을 원합니다. 내가 틀렸다면 나를 바로 잡아라. 그러나 당신이 보여 주었던 것은 단지 5 개의 줄만 잡는 것 같다. 내가 원하는만큼 많은 문자열을 가지고있는 5 개의 카테고리가 아닙니다. – user972276

관련 문제