2011-02-05 2 views
1

아이디어는 표준 입력에서 EOF에 도달 할 때까지 문자열을 읽는 것입니다 (이 형식은 "string - string"). 그런 다음 문자열을 두 개의 문자열로 분리하고 두 번째 배열에 저장합니다. 배열은 처음에는 2 행 20 열로 동적으로 할당되지만 다음 문자열을 추가 할 때마다 2 행을 추가하고 싶습니다 (함수 expandmat()). 내 코드는 다음과 같습니다.C 문자열을 2 차원 배열로 저장

char ** alloc(int rows, int collums) { 
    char ** mat; 
    int i; 
    mat = malloc(sizeof (char *) * rows); 
    for (i = 0; i < rows; i++) { 
     mat[i] = malloc(sizeof (char) * collums); 
    } 
    return mat; 
} 

char ** addtoarray(char ** mat, char * string1, char * string2, int position) { 

    sscanf(string1, "%s", mat[positon]); 
    sscanf(string2, "%s", mat[positon+1]); 
    return mat; 
} 

char ** getinput(char * longstring, char * string1, char * string2) { 

    int position = 0, n = 2, max = 30; 
    char ** mat; 
    mat = alloc(n, max); 
    while (fgets(longstring, max, stdin)) { 
     sscanf(longstring, "%s - %s", string1, string2); 
     addtoarray(mat, string1, string2, positon); 
     n += 2; 
     position += 2; 
     mat = expandmat(mat, n); 
    } 

    return mat; 
} 

또한이 코드에 뭔가 이해가되지 않는 부분이 있으면 해결 방법을 알려주시겠습니까?

나는 이것이 사소한 일처럼 보인다고 알고 있지만 그것은 나를 미치게 만들었다.

도움 주셔서 감사합니다.

+0

실례를하지만,이 정확히 내가 자바와 같은 높은 수준의 자매 언어를 선호 또는 C# 일반 C. 이상이 너무 쉬운 이유입니다 HLLs로 작성하십시오. (라이브러리 덕분에.) –

답변

0

realloc C 함수를 확인하여 매트 크기를 조정하십시오. 두 개 이상의 행을 추가 할 수 있도록 ... 와우 세 번째 시간을

+0

참으로 내가 realloc 시도했지만 꽤 정확히 작동하는지 어떻게 알아낼 수 없습니다. – boone

+0

나는이 같은 기능을했지만 segfault를 계속 유지했다. " mat = realloc (mat, newrows * sizeof (* mat));' – boone

0

을 (그것뿐만 아니라 행렬을 반환해야합니다 필요한 경우 realloc을 새 위치로 메모리를 복사합니다 때문에)

expandmat 매트를 realloc 함수해야하는 이런 질문이 오늘 일어납니다 :-). 내 대답은 여기에 도움이된다면

확인하시기 바랍니다 :이 댓글에 대한 Array of C structs