Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
JannoT
HV kasutaja

liitunud: 23.12.2005
|
14.10.2008 23:17:09
int'i pointeriks castimine C's |
|
|
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 |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
14.10.2008 23:58:58
|
|
|
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 |
|
 |
JannoT
HV kasutaja

liitunud: 23.12.2005
|
15.10.2008 00:29:51
|
|
|
Krr. Kõik oli hoopis ide süü. Nimelt ide'ga tehtud uus fail (funktsioonid.h) ei läinud sinna kus oli funktsioonid.c.
_________________ 011010000110100101101110011011100110000101110110011000010110000101110100011011000111010101110011 |
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
 |
troglodyte
Kreisi kasutaja

liitunud: 09.08.2002
|
15.10.2008 01:22:21
|
|
|
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 |
|
 |
andreie
HV vaatleja

liitunud: 09.09.2006
|
15.10.2008 21:23:37
|
|
|
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 |
|
 |
JannoT
HV kasutaja

liitunud: 23.12.2005
|
15.10.2008 22:05:57
|
|
|
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!
_________________ 011010000110100101101110011011100110000101110110011000010110000101110100011011000111010101110011 |
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
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
|
|