W poniższym kodzie chcę przeczytać plik tekstowy z pierwszą linią, jak <p> -> <many_declaration> <many_expression>. Fragment kodu jest następujący:

    ssize_t read;
size_t len = 200;
FILE *fptr;
fptr = fopen(fn ,"r");


if(fptr==NULL){
    printf("Error\n");
    fclose(fptr);
}

else{
    int line_number=1;

    char * line = (char *)malloc(sizeof(char)*200);
    while((read = getline(&line, &len, fptr)) != -1)
    {
        char * tokens = strtok(line, " \t\n");
        
        
        while( tokens != NULL ) 
        {
            
            printf("%s \n",tokens);
            printf("%zu \n",strlen(tokens));
            
            tokens = strtok(NULL, " \t\n");
            
        }
        

    }
}

Jednak podczas czytania go przy użyciu getline(), a następnie dzielnianie łańcucha za pomocą strtok(), pierwszy token powinien być <p> o rozmiarze 3, ale przeczytany ciąg jest niewidocznych znaków, po których następuje {{{ X3}} I długość wynosi 6. Czy możesz mi powiedzieć, jaki jest problem? Dziękuję Ci!

0
Mad Hatter 27 październik 2020, 10:08

1 odpowiedź

Najlepsza odpowiedź

Plik prawdopodobnie zaczyna się od BOM UTF8. Powinieneś przeczytać plik jako UTF-8, jeśli tak.

2
Martijn 27 październik 2020, 07:14