Я пытаюсь написать небольшую программу, которая использует realloc (), getchar () и некоторую арифметику указателей для хранения массива символов в памяти.
У меня есть функция под названием «inputArray» (в convert.c), которая получает указатель на char (который изначально равен NULL, объявлен в main.c), а затем перераспределяется с помощью одного символа, пока getchar () не получит '\ n 'char. кажется, что функции работают нормально, но затем, когда я пытаюсь напечатать строку обратно в main.c, я получаю ошибку «segmentation fault (core dumped)». Я часами искал, не могу найти, в чем проблема. Спасибо!
main.c:
# include "convert.h"
int main()
{
char * string = NULL;
inputArray(string);
printf("%s", string);
free(string);
return 0;
}
convert.c:
#include "convert.h"
void inputArray(char * array)
{
/*pointer to the array*/
char * ptr = NULL;
/*stores the char*/
char c = 0;
/*counter used for pointer arithmetic*/
int count = 0;
/*loop for getting chars in array*/
while ((c = getchar()) != '\n')
{
array = realloc(array, sizeof(char));
ptr = array + count;
*ptr = c;
++count;
}
/*add the null char to the end of the string*/
array = realloc(array, sizeof(char));
ptr += count;
*ptr = '\0';
}
convert.h:
#include <stdio.h>
#include <stdlib.h>
void inputArray(char * array);
sizeof(char)
всегда будет 1 ..... (ну, возможно, 2, если вы используете символы двойной ширины, но это фиксированный размер, а это не то, что вам нужно). - person gilez   schedule 07.12.2016