C - File Input/Validation LINUX/Windows Issue

Indlæg af Hanne Mølgaard Plasc

Problem



FILE *f;

char buffer[201];   
f=fopen("file.txt","r");

if (f==NULL)
{ 
    printf("file doesn't exist?!
");return 1;
}

while(1)
{
    if ((fgets(buffer, 200, f) == NULL)) 
        break;

    instruction = validatehex(buffer);
    if(instruction == - 1) 
        continue;

    PC += 4;
    Decode(instruction,verbose);
}


Ovenstående kode får input fra fillinjen efter linje, der validerer den.
Problemet er i validatehex-funktionen, det udskriver altid 'Ikke korrekt', selvom værdien er korrekt. Denne kode fungerer 100\% perfekt i Windows sæt ikke i Linux (Ubuntu).


uint32\_t validatehex(char input[])
{
    char hexchars[] = "1234567890abcdefABCDEF";
    uint32\_t hexvalue = 0;
    char last;
    if((strlen(input) != strspn (input,hexchars)) && ((strlen(input)-1 != strspn (input,hexchars)) &&  input[8] != ''))
    {
        printf("NO CORRECT
"); 
        return INERR;
    }

    sscanf(input,"\%08x",&hexvalue);
    return hexvalue;
}


Jeg har prøvet det på tværs af Windows med mingw32 c compiler og det virker perfekt.
Filen, der læses fra, består kun af hex-værdier, der er 8 cifre lange på hver linje.


Kan nogen se, hvor koden går galt? Eller hvorfor arbejder det anderledes inden for Linux?

Bedste reference


Linux og Windows bruger forskellige end-of-line markører: Windows bruger , mens Linux bruger . Hvilke slags linebreaker bruger din fil?


Hvis du læser en fil skrevet i Windows på Linux, får du en ekstra i slutningen af ​​strengen.


Dette er en måde at undgå problemet på:


int len = strlen(input);
if (input[len-1] == '
') input[len-1] = '';