Я пытаюсь написать программу, которая принимает файл открытого текста в качестве аргумента и анализирует его, добавляя все числа вместе, а затем распечатывая сумму. Ниже мой код:Почему я получаю ошибку сегментации?
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
static int sumNumbers(char filename[])
{
int sum = 0;
FILE *file = fopen(filename, "r");
char *str;
while (fgets(str, sizeof BUFSIZ, file))
{
while (*str != '\0')
{
if (isdigit(*str))
{
sum += atoi(str);
str++;
while (isdigit(*str))
str++;
continue;
}
str++;
}
}
fclose(file);
return sum;
}
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "Please enter the filename as the argument.\n");
exit(EXIT_FAILURE);
}
else
{
printf("The sum of all the numbers in the file is : %d\n", sumNumbers(argv[1]));
exit(EXIT_SUCCESS);
}
return 0;
}
И текстовый файл я использую:
Это довольно скучный текстовый файл с некоторые случайные числа разбросаны на всем ее протяжении.
Вот один: 87 и вот еще: 3
и, наконец, две последние цифры: 12 19381. Готово. Уф.
Когда я компилирую и пытаюсь запустить его, у меня возникает ошибка сегментации.
Эй спасибо он работает сейчас. Но если вы не возражаете, несите меня еще ненадолго. Если вы попытаетесь запустить программу после ее исправления, по какой-то причине 'atoi()' анализирует число '19381' как' 193' и '81' соответственно. Любая идея, почему это происходит? – jon2512chua
@Jon: Обновлен ответ :) – codaddict
Owh Я вижу это сейчас, спасибо! :) – jon2512chua