Я хочу создать таблицу символов из кода сборки SIC. Для этого я попытался отделить все строки от ассемблерного кода. Следовательно, пытаясь сделать первый шаг для этого, я попробовал этот код.
Здесь я попытался прочитать ассемблерный код из файла построчно. А затем разделить строки в строке на токены.
Когда я удаляю раздел разделения токенов (как указано в коде), я печатаю все строки, как и ожидалось. Но если я работаю вместе с разделением токенов, первая строка считывается, и токены разделяются, как я и ожидал. Но для второй строки я получаю ошибку как ошибку сегментации. Я не мог отследить, где я ошибся.
Итак, мне нужны разъяснения от экспертов.
Заранее спасибо.
FILE* sourceCode = fopen("/home/muthu/LangFiles/SIC/PASS1/PROGRAM.txt","r"); if(checkForFileOpeningErrors() == ERROR) //Iam using separate function return EXIT_FAILURE; //Terminate the program. int maxLineLength = 50; while(1) { char* lineReader = NULL; // since getline will reallocate. if( getline(&lineReader,(size_t*)&maxLineLength,sourceCode) == -1 ) break; printf("%s",lineReader); // TOKEN SEPARATION STARTS HERE.... If I comment this section out iam getting all lines printed char* wordReader; wordReader = strtok(lineReader," \n"); printf("%s\n",wordReader); while(1) { wordReader = strtok(NULL," \n"); printf("%s\n",wordReader); } // TOKEN SEPARATION ENDS HERE.... }
Мой файл:
COPY START 1000
FIRST STL RETADR
CLOOP JSUB RDREC
LDA LENGTH
COMP ZERO
JEQ ENDFIL
JSUB WRREC
J CLOOP
.
.
.
END
Мой образец вывода:
muthu@muthu-G31M-ES2L:~/LangFiles/PASS1$ ./a.out
All Files successfully opened!! Operation has begun...
COPY START 1000
COPY
START
1000
segmentation Fault.
getline
? Кстати, обратите внимание, что у вас, похоже, есть утечка памяти, поскольку функцияgetline
, по-видимому, выделяет память для строки, которая никогда не освобождается. - person Sander De Dycker   schedule 12.07.2011