Я довольно новичок в 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(×); //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);
}
'getchar' возвращает' int', но '((текст [* times]) = getchar())' does not. Поэтому вы не можете сравнить его с EOF. Ни один символ не является EOF. –
Не возвращайте ссылки на автоматические переменные! Даже статические. –
'* times ++; // вызов стека здесь '- >>' * times + = 1; // вызываем стек здесь – wildplasser