2013-04-25 3 views
1

Так вот мой код до сих пор:Я получаю ошибку сегментации, когда пытаюсь проверить пустые строки?

char *c; 
char inputString[200]; 

//get number of lines 
c=fgets(inputString, 200, in_file); 
while(c!=NULL){ 
    numLines++; 
    c=fgets(inputString, 200, in_file); 
} 

rewind(in_file); 

//array of instructions 
char** instruc = malloc(numLines * 200); 

c = fgets(inputString, 200, in_file); 

//fill the array of instructions. 
while (c != NULL){ 
    //allocate space for the string in the index of the array 
    instruc[i] = malloc(200); 
    strcpy(instruc[i], inputString); 
    if (strcmp(instruc[i], "\n")==0){ 
     fprintf(stderr, "Blank line.\n"); 
     exit(-2); 
    } 
    i++; 
    c = fgets(inputString, 200, in_file); 
} 

По какой-то причине, мой зЬгстр (Инструк [я], «/ п») не ловит новую строку в моем скрипте, поэтому всякий раз, когда мой код встречает новая строка, я получаю ошибку сегментации. Вот пример скрипта, который проходит в:

CONST R1 11 

PUSH R1 
CONST R2 12 

между ФИКС R1 11 и PUSH R1, я получаю ошибку сегментации. Может ли кто-нибудь помочь мне в том, как проверить пробелы между строками? Благодаря!

ответ

1

Пустая (пустая) линия "\n" не "/n" для вашей программы.

+0

Oh! Спасибо, пошли и исправили это ... однако, я все еще получаю segfault ... – user2253332

0

Среди других проблем в вашем коде.

char** instruc = malloc(numLines * 200); 

Это не дает вам динамический массив символов 2-d, как вы себе представляли.

Вот SSCCE создания динамического массива строк ..

#include <stdio.h> 
#include <stdlib.h> 

#define ROW_SZ 5  //row size is number of strings 
#define COL_SZ 200  //column size is number of characters in a string 

int main() 
{ 
int i; 
char** str = malloc(ROW_SZ * sizeof(char*));  //str is assigned char** 

for (i = 0; i < ROW_SZ; i++) 
    str[i] = malloc(COL_SZ * sizeof(char)); //str[i] is assigned char* 

// code here to use your dynamic 2-d string 


for (i = 0; i < ROW_SZ; i++) 
    free(str[i]); 

free(str); 

return 0; 
} 
0

Пустая строка сравнивается с «\ п» не с «/ п».

+0

Я исправил это, но у меня все еще есть segfault. – user2253332

+0

Не получив segfault, отлично работает для меня. Не удалось выполнить отладку с помощью gdb. Так что было бы достаточно легко отслеживать, где это происходит. –

0

Логическая ошибка в этой части Кодекса

if (strcmp(instruc[i], "/n")==0){ 
     fprintf(stderr, "Blank line.\n"); 
     exit(-2); 
    } 

Здесь Вы используете «/ п» вместо «\ п» для проверки пустых строк.

+0

Я исправил это, но у меня все еще есть segfault. – user2253332

0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(void){ 
    char inputString[200]; 
    size_t i, numLines = 0; 
    FILE *in_file = fopen("input.txt","r"); 

    while(NULL!=fgets(inputString, sizeof(inputString), in_file)){ 
     if (strcmp(inputString, "\n")==0){ 
      fprintf(stderr, "Blank line.\n"); 
      exit(-2); 
     } 
     ++numLines; 
    } 

    rewind(in_file); 

    char** instruc = malloc(numLines * sizeof(char*)); 

    for(i=0;i<numLines;++i){ 
     instruc[i] = malloc(sizeof(inputString)); 
     fgets(instruc[i], sizeof(inputString), in_file); 
    } 
    fclose(in_file); 
    //do something 
    //deallocate memory 
    return 0; 
} 
Смежные вопросы