как сформировать массив чисел, взятый вход из файла в C - PullRequest
0 голосов
/ 27 мая 2010

Программа должна быть в состоянии сделать массив чисел из текстового файла, который выглядит так Данные приведены как это 123 2132 1100909 3213 89890

мой код для этого

char a;
char d[100];
char array[100];
a=fgetc(fp) // where fp is a file pointer 

if (a=='')
{
d[count1]='/0';
strcpy(&array[count],d);
count=count+1;
memset(d,'\0',100)
count1=0;
}

else 
{
d[count1]=a;
count1=count1+1;
}
a=fgetc(fp);

У меня ошибка сегментации. хочу сохранить каждое число в массиве, чтобы я мог выполнить сортировку по нему

Ответы [ 3 ]

2 голосов
/ 27 мая 2010

Ваша (первая) проблема здесь:

d[count1]='/0';
strcpy(&array[count],d);

Вы написали '/0', это не то, что вы думаете. Предполагая, что вы имели в виду '\0' (ноль char литерал), вы, похоже, пытаетесь вручную завершить строку d перед вызовом strcpy(). Проблема в том, что то, что на самом деле записывается в d, не является нулевым байтом, и поэтому d не заканчивается нулем, а затем strcpy() выключается и начинает читать случайную память после нее и копировать эту память в array, до тех пор, пока чтение или запись не окажутся вне памяти, к которой вам разрешен доступ, и вы не получите ошибку сегментации.

У вас также есть некоторая путаница в том, что array есть. Он объявлен как массив 100 char с, но вы рассматриваете его как массив строк. Возможно, вы хотели объявить это char *array[100]?

2 голосов
/ 27 мая 2010

Хмм ... в первом приближении, чтобы прочитать одно число, рассмотрите возможность использования fscanf("%d", &number);. Для хранения прочитанных вами чисел вам, вероятно, понадобится создать массив чисел (например, int numbers[100];). Чтобы прочитать более одного числа, используйте цикл для чтения чисел в массив.

Sidenote: fscanf не особо прощает ошибки во входных данных (среди прочего), поэтому для производственного кода вы, вероятно, захотите прочитать строку и разобрать числа из этого, но сейчас это выглядит вам, вероятно, просто нужно получить что-то, что работает для правильного ввода, не беспокойтесь о корректной обработке некорректного ввода.

0 голосов
/ 27 мая 2010

Действительно ли так написан код?

В d[count1]='/0'; Я думаю, что вы имеете в виду d[count1]='\0'; (уже упоминалось Дэниелом Приденом).

Также отсутствует точка с запятой вконец memset(d,'\0',100)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...