Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C - Program prestal pracovat

Zdravim vas, rad by som naplnil retazec nejakymi !cislami! a budem ich davat v jednom riadku oddelene medzerami pokial nestlacim enter.... napr. 11 22 33\n akonahle stlacim Enter program ihned prestane pracovat... zozaciatku to islo a vypisalo mi to retazec ale namiesto volneho miesta to pisalo nieco ako napr. 11 22 33...Windows_NT no a po viacerych pokusoch uz ani nevypise z dovodu padu exe. Neviete kde je chyba prosim?

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

int main()
{
    const int POCET=20;
    char *retazec=(char*)malloc(POCET*sizeof(char));
    char znak;
    int i=0;

    for(i=0;(znak=getc(stdin))!='\n';++i)
    {
        retazec[i]=znak;
    }
    return 0;
}
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
alebo ak getc(stdin) caka na enter (neviem teraz zhlavy), tak musis testovat asi '\r' (plus limity p… nový
MM.. 05.11.2014 18:59
MM..
Alebo ti dosla RAM apod a malloc vracia NULL. Ani toto netestujes. nový
MM.. 05.11.2014 19:04
MM..
A ten tvoj program z dotazu nic nevypisuje. Ak ten string chces vypisovat (alebo akekolvek ine stri… nový
MM.. 05.11.2014 19:05
MM..
Ten vypis som vymazal schvalne aby to bolo prehladnejsie.... viem ze by sa mala testovat RAM aj limi… nový
Parker 05.11.2014 19:31
Parker
Po cykle for napises: retazec[i]='\0'; nový
MM.. 05.11.2014 19:46
MM..
A pada ti to prave na tom vypise, takze tym ze si v dotaze vymazal samotnu pricinu/chybu, si len vse… nový
MM.. 05.11.2014 19:48
MM..
nie padlo to akonahle som stlacil enter aj ked som ten vypis uz vymazal nový
Parker 05.11.2014 20:29
Parker
Tak si to po tej zmene neskompiloval :) Alebo testuj '\r', neviem co dava ako novy riadok tvoj OS.… poslední
MM.. 05.11.2014 20:36
MM..

Ten vypis som vymazal schvalne aby to bolo prehladnejsie.... viem ze by sa mala testovat RAM aj limity retazca ale postaci mi na konkretnu ulohu toto bez kontroly jaj vidis to bude asi tym ze som tam nedal \0 a to dam normalne za tym alokovanym polom ze retazec[20]='\0'; ??

Tak si to po tej zmene neskompiloval :)

Alebo testuj '\r', neviem co dava ako novy riadok tvoj OS.
V kazdom pripade musis v cykle testovat aj i<(POCET-1), a ak to uz neni splnene tak nesmies vliezt do cyklu ale musis ho ukoncit. POCET-1 preto, aby si mal miesto na tu ukoncovaciu nulu.
Tym testom zabezpecis ze ti to nepadne (nebudes prepisovat cudziu pamat kdesi), ale normalne program dobehne aj keby tam bol nejaky problem s chybajucim '\n' apod. Mozno getc ani neposiela '\n' alebio '\r' neviem zhlavy, ale nejaky koniec riadku by mal poslat.

Zpět do poradny Odpovědět na původní otázku Nahoru