2015-05-20 4 views
0

Я довольно новичок в C, и у меня возникают проблемы с упражнением, которое я должен выполнить: Введите текст и символ, используя функцию struct info find (char *, int , char) , который возвращает структуру с адресом первого вхождения в тексте и количество раз, которое оно появляется в тексте. Я пытаюсь использовать SIGSEGV при попытке использовать его. Я заметил строки с очевидными проблемами:Функция SIGSEGV in C

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

struct info{ 
    char *ret; 
    int length; 
}; 

char * load(int *); 
struct info find(char *, int, char); 

int main(void) 
{ 
    char *TP; 
    char character; 
    struct info SP; 
    int times; 

    TP=load(&times);      //loads the text 
    printf("Enter the character to find"); 
    scanf("%c", &character); 
    //finds a character, and returns a struct with the address of the first 
    //occurrence in the text and the amount of times it appears in the text 
    SP=find(TP, times, character); 

    if(SP.ret!=NULL) 
    { 
     printf("%s", SP.ret); 
     printf("The length of the displayed text is %d", SP.length); 
    } 
    else 
    { 
     printf("Character doesn't exist in the text"); 
    } 

    return(0); 
} 

char * load(int *times) 
{ 
    static char text[1000]; 
    printf("Enter text, max 1000 chars\n"); 
    while((*times<1000)&&(((text[*times])=getchar())!=EOF)) 
    { 
     *times++;       //call stack here 
    } 
    text[*times]='\0';      //call stack here 
    return(text); 
} 

struct info find(char *TP, int cant, char character) 
{ 
    static struct info aux; 
    aux.ret=strchr(TP,character); 
    aux.length=strlen(aux.ret); 
    return(aux); 
} 
+0

'getchar' возвращает' int', но '((текст [* times]) = getchar())' does not. Поэтому вы не можете сравнить его с EOF. Ни один символ не является EOF. –

+1

Не возвращайте ссылки на автоматические переменные! Даже статические. –

+1

'* times ++; // вызов стека здесь '- >>' * times + = 1; // вызываем стек здесь – wildplasser

ответ

-1

Возможно, вы пытаетесь получить доступ к элементу массива за пределами или пытаться использовать слишком много памяти.

+0

На самом деле это не ответ. Есть ли у вас какие-либо предложения относительно того, где в коде это может произойти, или как его исправить? –

Смежные вопросы