2013-10-19 4 views
0

에서 연결리스트로 분리 라인 I는 다음과 같습니다 텍스트 파일이 있습니다. 지금까지 내가 이것을 가지고 있지만 올바르게 읽지 못하기 때문에 strtok()을 사용하는 방법을 모르겠습니다. 누군가 나를 도와 줄 수 있습니까?읽기와 C

#include <stdio.h> 
#include <stdlib.h> 
#include <fcntl.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <string.h> 

struct node 
{ 
    char* author; 
    char* title; 
    struct node* next; 
}; 

int main() 
{ 
    struct node *root; 
    struct node *c;  
    root = malloc(sizeof(struct node)); 
    root->next = 0; 
    c = root; 

    FILE *f; 
    f = fopen("books.txt", "r"); 

    char line[255]; 
    while(fgets(line, sizeof(line),f) != NULL) 
    { 
     char *token = strtok(line, ";"); 
     while(token!=NULL) 
     { 
      fread(&c->author, sizeof(c->author), 1, f); 
      token = strtok(NULL, " "); 
     } 
     fread(&c->title, sizeof(c->title), 1, f); 
     //printf("%s",&c->author); 
    } 

    fclose(f); 
    return 0; 
} 
+1

각 새 노드의 작성자 및 제목 필드에 메모리 *를 할당 한 다음 예를 들어이 필드에 문자열을 복사 *해야합니다. 'strcpy'. –

답변

0

잘못 들었습니다. 항상 다음을 수행해야합니다.

  1. 충분한 데이터를 읽으십시오.
  2. 데이터를 구문 분석하십시오.
  3. 힙의 메모리를 할당하십시오.
  4. 데이터를 복사하십시오. char *authorchar *title 변수에 할당 된 메모리 없어서는 안되는 동안

line 변수는 단지 임시 버퍼이다. fread()을 호출하는 것은 코드에서 완전히 난센스입니다. fgets()을 이미 호출 했으므로 파일에서 데이터를 읽을 수 있습니다. 나머지는 문자열 연산이어야합니다.

일반적인 방법은 char *start 당신이에 char *end 관심있는 데이터 뒤의 첫 번째 문자에 관심있는 데이터의 시작 부분으로 지적 얻을 수 있습니다, 다음 author = strndup(start, end-start)를 사용하여 힙 할당 사본을 요청하거나 사용하여 동일한을 수행 malloc()memcpy() 또는 strncpy()의 조합

관련 문제