2013-10-07 3 views
0

파일에서 읽은 문자를 문자 배열에 저장하려고 시도하지만 이후의 모든 문자도 저장됩니다. 이 코드에서는 배열을 초기화하는 구조체와 함수를 만들었습니다. "Structures.h" "Utilities.c"에서C - 전체 배열을 반환하는 구조체의 문자열

typedef struct (
    int size; 
    char *elem; 
    } cvector; 

에서

나는 말한다 텍스트 파일을 읽을려고 그런

cvector make_cvector (int size) 
    { cvector temp; 
     temp.size = size; 
     temp.elem = calloc(size, sizeof(char)); 
     return temp; 
    } 

: "ABC"

을 본문에서 나는 진술했다 : (여기서 nPtr은 파일을 여는 포인터이다)

cvector NodeID; 
NodeID = make_cvector(3); 
for(i=0;i<3;i++){ 
     fscanf(nPtr,"%s", &NodeID.elem[i]); 
     printf("%s ",&NodeID.elem[i]); 
} 

이 "ABC"를 초래하지만 지금이 루프 후, 나는 또 다른 루프 입력 :

for(i=0;i<3;i++) 
     printf("%s ", &NodeID.elem[i]); 

사실 내가 저장 "A" "B"와 "C"를하려는 경우 "C BC ABC"에 결과를 갈라져. 아마도 초기화 또는 포인터에 문제가있을 수 있습니다. 그러나 온라인으로 읽으려고 시도했습니다. 오류는 어디에서 발생할 수 있습니까? 고맙습니다!

답변

2

정말로 원하는 것은 한 문자를 인쇄하는 경우 문자열을 인쇄하는 것입니다.

printf("%c ",NodeID.elem[i]); 

에 의해

printf("%s ",&NodeID.elem[i]); 

교체하고 그것을 작동합니다.

+0

감사합니다. 오류가 있습니다. 그러나 인쇄는 내 문제를 설명하는 수단이었습니다. 내가 만난 실제 문제는 후반 부분에 있습니다 : 'if (strcmp (LoadLoc, & NodeID.elem [j]) == 0)' 기본적으로 발생하지 않았습니다. 난 그때 초기화와 함께 오류가 아니라고 생각하지만 "strcmp"의 사용과 함께 적절한 대안이 될 것이라고? : D 나는 온라인으로도 검색하려고 노력할 것이다. 대단히 감사합니다! – user2853084

+0

'LoadLoc'은 단일 문자를 포함한 문자열입니다, 맞습니까? 그렇다면'LoadLoc'을'char'에 저장하고'if (LoadLoc == NodeID.elem [j])'를 실행하십시오 – Simon

+0

고마워요! 이 방법이 효과적 이었지만 프로그램의 일부가 문자열이 아닌 문자를 비교하는 방식으로 바뀔 수 있으므로 특정 수준의 보편성을 유지하려고했습니다. 어쨌든 첫 번째 차원이 문자열 배열이고 두 번째 차원이 문자열 당 문자 배열 인 "cvector"대신 "cmatrix"로 초기화하여 문제를 해결했습니다. 모든 도움에 감사드립니다! :디 – user2853084

관련 문제