Reading in strings without header <string.h>

Viewed 95

I am a newbie in C and for an exercise I have to write a program, where I can read in strings. If my reserved memory (length BUFFER_SIZE) isn't enough, it should reserve memory in increments of +=BUFFER_SIZE, as long as needed to read the string. I tried to write some functions to get this done, but it doesn't work. Can somebody please help me?

My code:

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>

#define BUFFER_SIZE 10

size_t string_length(char *string)
{
  size_t i = 0;
  while(string[i] != '\0')
  {
    i++;
  }
  return i;
}
void string_concatenate(char *string, char *string_to_chain)
{
  size_t length = string_length(string);
  for(size_t i = 0; *(string_to_chain + i) != '\0'; i++, length++)
  {
    string[length] = string_to_chain [i];
  }
  string[length] = '\0';
}
char *string_search(char *string, char character)
{
  do
  {
    if (*string == character)
      {
        return (char*)string;
      }
  } while (*string++);
  return NULL;
}
char *get_line()
{
  int line_size = BUFFER_SIZE;
  char* line = malloc(line_size * sizeof(char));
  if(line == NULL)
  {
    return NULL;
  }
  printf("Bitte Text eingeben: \n");
  fgets(line, BUFFER_SIZE, stdin);

  char *new_line_character = string_search(line, '\n');
  while(new_line_character == NULL)
  {
    line_size += BUFFER_SIZE;

    line = realloc(line, (line_size * sizeof(char)));
    if(line == NULL)
    {
      return NULL;
    }

    char *new_line = line + BUFFER_SIZE - 1;
    fgets(new_line, line_size, stdin);
    new_line_character = string_search(line, '\n');
  }
  
  *new_line_character = '\0';
  return line;
  
}
}
int main(void) {
    char *string = get_line();
    printf("s%\n", string); 
}
0 Answers
Related