Привет, ЛОР! Пишу для разминки калькулятор. Дописался вот, что оно падает, хотя вроде-бы я в других программах делал так же, ничего не падало.
Погуглил бы, да не знаю, что именно нужно. Подскажите, пожалуйста.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
double
next_expr (char expr[])
{
double tv, r;
char *ns;
size_t p, len;
unsigned int act;
tv = 0;
r = 0;
len = strlen (expr);
ns = NULL;
enum ACT {ADD, SUB, MUL, DIV};
switch (expr[0])
{
case '+':
act = ADD;
case '-':
act = SUB;
}
for (size_t i = 1; i < len; i++)
{
if (ns == NULL && isdigit (expr[i]))
ns = &expr[i];
else
if (isspace (expr[i]))
{
printf ("%d\n", i);
expr[i] = '\0';
sscanf (ns, "%lf", &tv);
switch (act)
{
case ADD:
r += tv;
}
ns = NULL;
}
}
return r;
}
int
main (void)
{
char *expr = "+ 1 2 3 ";
printf ("%lf\n", next_expr(expr));
return EXIT_SUCCESS;
}
age@normandy:~/Sources$ ./nc
1
Segmentation fault
-----
Starting program: /home/age/Sources/nc
Program received signal SIGSEGV, Segmentation fault.
0x08048547 in next_expr (expr=0x8048694 "+ 1 2 3 ") at nc.c:36
37 expr[i] = '\0';