FILE *f;
char buffer[201];
f=fopen("file.txt","r");
if (f==NULL)
{
printf("file doesn't exist?!\n");return 1;
}
while(1)
{
if ((fgets(buffer, 200, f) == NULL))
break;
instruction = validatehex(buffer);
if(instruction == - 1)
continue;
PC += 4;
Decode(instruction,verbose);
}
Приведенный выше код получает входные данные из строки файла строкой, проверяющей его.
Проблема в функции validatehex, которая всегда печатает «Неправильно», даже если значение верное. Этот код работает на 100% идеально в окнах, не в 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] != '\0'))
{
printf("NO CORRECT\n");
return INERR;
}
sscanf(input,"%08x",&hexvalue);
return hexvalue;
}
Я пробовал это в windows с компилятором mingw32 c, и оно отлично работает.
Файл, из которого он читает, состоит из шестнадцатеричных значений длиной 8 цифр в каждой строке.
Кто-нибудь может увидеть, где код идет не так? Или почему он работает по-другому в Linux?