2009-10-08 3 views
1

저는 C 언어를 배우고 있으며 이것을 처리하는 방법을 알아 내는데 어려움을 겪고 있습니다. 그런데, I는 두 개의 구조체를 가지고문자열을 작은 부분으로 나누고 구조체를 구성하십시오 (C 프로그래밍)

struct myStruct { 
    ... 
    struct myString *text[5]; 
    ... 
} allStructs; 

struct myString { 
    char part[100]; 
}; 

목표는 100 개 문자의 각 행으로 분할 텍스트의 5 개 가지 부분 allStruct[n] 점을 가지고있다.

allStructs = calloc(n, sizeof(allStructs)); 

그런 다음, 나는 내가 텍스트의 특정 부분에 5 개 부분으로 분할하고, allStructs[n].text[n].part 지점을 갖고 싶어 char text[500]를 작성했다고 가정 : 그래서 나는 공간을 할당합니다. 아무도 내가 어떻게 진행 하는지를 도울 수 있습니까?

답변

1

짧은 대답 : '\ 0'문자로 각 문자열을 종료하지 않았기 때문에이 작업을 수행 할 수 없습니다.

긴 대답 :

struct myStruct { 
    struct myString *text; 
} 
struct myString { 
    char *part; 
} 

할당이 있어야한다 :

struct myStruct *allStruct = calloc(n, sizeof(struct myStruct)); 

그래서 당신은 n 개의 구조체 MYSTRUCT에 포인터/배열이 같은 변경 구조체는 더 많은 유연성을 가지고있다.

그런 다음 allStruct의 모든 멤버를 초기화합니다.

for(i=0; i<n; ++i) 
{ 
    allStruct[i].text = calloc(5, sizeof(myString)); 
    // Following for only needed if you want new strings by using the strncpy (see above) 
    for(y=0; y<5; ++y) 
    { 
     allSTruct[i].text[y].part = calloc(101, sizeof(char)); 
    } 
} 

이제 모든 vars를 초기화했습니다.

는 allStruct [N]으로 500 문자 긴 문자열을 복사하려면 :이 작업을해야

for(i=0; i<5; i++) 
{ 
    allStructs[n].text[i].part = &text[i*100]; // If you want to point on the existing string 
    // OR 
    strncpy(allStructs[n].text[i].part, &text[i*100], 100); // If you want to have new strings 

    // In all case, terminate the string with '\0' 
    allStructs[n].text[i].part[100] = '\0'; 
} 

.

+0

유망! 감사합니다. 나는 그것을 시도하고 다시 당신에게 돌아갈거야 : – o01

+0

그래, 매력처럼 일 했어! : D 조 – o01

0

글쎄, C 문자열은 null 문자 ('\0')로 끝나는 문자 배열입니다. 따라서 text[500] 배열을 반복하여 각각 myString 부분에 100자를 넣으려고합니다. C 문자열은 null로 끝나기 때문에 char part[100]에만 99 문자를 저장할 수 있다는 것을 명심하십시오. 당신은 단지 공백 문자에 대한 부분을 종료하기를 원한다면 또한

(공간 (' '), 새로운 라인 ('\n') 또는 탭 ('\t'))는 100 자로 제한 및 분할에 가장 가까운을 찾을해야 거기에있는 끈.

0

allStructsstruct myStruct의 개체입니다. calloc()으로 '재 할당'할 수 없습니다.

개체 allStructs에는 5 개의 포인터 배열 인 text가 있습니다.
struct myString 유형의 특정 개체를 가리 키도록 해당 포인터를 설정해야합니다.

char text[500]에서 다양한 struct myString 개체로 문자를 복사하면 모든 것이 올바르게 작동합니다.

의사 코드

struct myString part1; 
struct myString part2; 
struct myStruct allstructs; 
allStructs.text[0] = &part1; 
allStructs.text[1] = &part2; 
strncpy(part1.part, text, 99); 
part1.part[99] = '\0'; 

printf("part2: %s\n", allStructs.text[1].text); 

오! 그리고 ('s'로 끝남)을 allStruct (no 's)와 혼동하지 마십시오.