[C] scanf + fgets = problemy z buforem?

0
//Program is supossed to take in any length string but write string with size that user has given in
 
#include <cstdio>
#include <stdlib.h>
#include <malloc.h>
 
 
int main()
{
        int size, i;
        char *strings;
        printf("How many letter has your string: ");
        scanf("%d",&size);
        strings = (char*)malloc(size +1); //+1 dla /0
        printf("Type in string: ");
        fgets(strings,size,stdin);
 
        printf("%s",strings);
 
        free(strings);
        //scanf("%s",strings);
}
 
 

Program ma przyjmować string o dowolnym rozmiarze, a ma wypisać go w rozmiarze który został zaalokowany, tzn:
jaki dlugi jest string: 5
wprowadz string: tomawiecejniz5
twojstring: tomaw

Warunkiem jest użycie dynamicznej alokacji czyli malloc... Program kończy działanie po wprowadzeniu "size", ma to związek z zapchaniem bufora(?) i kompletnie nie wiem co robić... Wczytać to jakoś inaczej?

0
igotproblem napisał(a)

Warunkiem jest użycie dynamicznej alokacji czyli malloc... Program kończy działanie po wprowadzeniu "size", ma to związek z zapchaniem bufora(?) i kompletnie nie wiem co robić... Wczytać to jakoś inaczej?

Uzycie fread mogloby byc dobre w tym przypadku, poniewaz ograniczy ilosc danych zapisanych do bufora, wiec z overflowem nie bedzie problemu, ale nie ograniczy mozliwej ilosci danych, ktore mozna wpisac, poniewaz bedzie czekal na potwierdzenie, np, enter, jesli go puscisz dla stdin. Moze wczytuj w petli po prostu znak po znaku za pomoca getchar, czy fgetc.

0
igotproblem napisał(a)

        printf("How many letter has your string: ");
        scanf("%d",&size);
        strings = (char*)malloc(size +1); //+1 dla /0


 

Na początek w mallocu podaj konkretny rozmiar tego bloku pamięci który chcesz zarezerwować czyli dodaj sizeof(char) * (size+1) a nie size +1

0

AFAIK char jest wielkośći jednego bajta więc... co za różnica?

1 użytkowników online, w tym zalogowanych: 0, gości: 1