Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  int'i pointeriks castimine C's märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
JannoT
HV kasutaja
JannoT

liitunud: 23.12.2005




sõnum 14.10.2008 23:17:09 int'i pointeriks castimine C's vasta tsitaadiga

Kuidas selline asi käib siis? Compiler vingub siin ,et:
[Warning] initialization makes pointer from integer without a cast

Samas kood ise töötab.
Kood mille peale hoiatuse annab:

char *parsitud_nimi = funktsioon1(nimi);

Funktsioon1:

char *funktsioon1(char *nimi)
{   
    char *parsitud_nimi;
    parsitud_nimi = (char *)calloc(strlen(NIME_LIIDE) + strlen(nimi), sizeof(char));
    strcpy(parsitud_nimi, NIME_LIIDE);
    strcat(parsitud_nimi, nimi);
    strcat(parsitud_nimi, "\n");
   
    return parsitud_nimi;
}

_________________
011010000110100101101110011011100110000101110110011000010110000101110100011011000111010101110011
Kommentaarid: 5 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 14.10.2008 23:58:58 vasta tsitaadiga

JannoT kirjutas:
Kood mille peale hoiatuse annab:
char *parsitud_nimi = funktsioon1(nimi);

Aga oled sa kindel, et see muutuja nimi polegi sul mitte int tüüpi?

Vähemasti minul õnnestus selline hoiatus saada vaid juhul kui üritasin sellele funktsioonile argumendiks int-i anda. Kui ma aga kirjutasin:

char *nimi = "mingi tekst";
char *parsitud_nimi = funktsioon1(nimi);

siis ei saanud ma mingit hoiatust.
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
JannoT
HV kasutaja
JannoT

liitunud: 23.12.2005




sõnum 15.10.2008 00:29:51 vasta tsitaadiga

Krr. Kõik oli hoopis ide süü. Nimelt ide'ga tehtud uus fail (funktsioonid.h) ei läinud sinna kus oli funktsioonid.c. icon_neutral.gif
_________________
011010000110100101101110011011100110000101110110011000010110000101110100011011000111010101110011
Kommentaarid: 5 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 15.10.2008 01:22:21 vasta tsitaadiga

NB! Sul tekib buffer overflow - eraldatud massiivis ei ole ruumi newline '\n' ning stringi terminaatori '\0' jaoks.
_________________
ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andreie
HV vaatleja
andreie

liitunud: 09.09.2006




sõnum 15.10.2008 21:23:37 vasta tsitaadiga

troglodyte-l on õigus.

Muide, lühema variandi saab sprintf-i kasutades:

char *funktsioon1(const char *nimi)

    char *parsitud_nimi = (char *)calloc(strlen(NIME_LIIDE) + strlen(nimi) + 1 + 1, sizeof(char));
    sprintf(parsitud_nimi, "%s%s\n", NIME_LIIDE, nimi);
    return parsitud_nimi;
}

_________________
Unix survives only because everyone else has done so badly.
Kommentaarid: 5 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
JannoT
HV kasutaja
JannoT

liitunud: 23.12.2005




sõnum 15.10.2008 22:05:57 vasta tsitaadiga

andreie kirjutas:
troglodyte-l on õigus.

Muide, lühema variandi saab sprintf-i kasutades:

char *funktsioon1(const char *nimi)

    char *parsitud_nimi = (char *)calloc(strlen(NIME_LIIDE) + strlen(nimi) + 1 + 1, sizeof(char));
    sprintf(parsitud_nimi, "%s%s\n", NIME_LIIDE, nimi);
    return parsitud_nimi;
}


Amazing! Arvestades ,et taolisi parsimisi on mul veel programmis siis teeb see asja ikka väga palju lühemaks. Aitäh! thumbs_up.gif

_________________
011010000110100101101110011011100110000101110110011000010110000101110100011011000111010101110011
Kommentaarid: 5 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  int'i pointeriks castimine C's
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.