» »

c++ char ime[10];

c++ char ime[10];

fogl ::

Zakaj mi javi napako, če napišem:
char ime[10];
ime="klemen";
če napišem:
char ime[10]="klemen";
je pa vse ok.

Kako predpišem vrednost za ime, razen z
ime[1]='k';
ime[2]='l';
....
?
lp, klemen

fx ::

Fogl a ti sploh veš kaj osnov ?.
Javi ti napako zato ker ime nimaš deklarirano, kar v drugem primeru je.

lp

"Naj živi UNIN"

Zgodovina sprememb…

  • spremenil: fx ()

Senitel ::

strcpy in strcat...

fogl ::

char ime[10]; //a to ni deklaracija?
ime="klemen"; //tukaj ga hočem inicializirati
lp, klemen

Brilko ::

Senitela posluši. Stringom ne moreš kar tako prirejati vrednosti, razen pri inicializaciji, kjer definiriraš spremenljivko char. Zato moraš uporabiti npr strcat.

fogl ::

OK, sem dojel...hvala! :D

Takole gre:
#include <iostream.h>
#include <string.h>

int main()
{
	char ime[10];
	strcpy (ime, "klemen");
	cout<<ime<<endl;
	return 1;
}
lp, klemen

OwcA ::

Tri stvari:

1) ali razumeš čemu tako
2) to kar ti pišeš ni C++
3) čemu raje ne uporabiš std::string
Otroška radovednost - gonilo napredka.

BigWhale ::

strcpy/cat se ne bi smel NIKOLI uporabljat...

strncpy()
strncat()

NE poslusat sentinela... Vsaj ne 100% ;)

Zgodovina sprememb…

  • spremenil: BigWhale ()

fogl ::

OwcA,
ne rezumem čemu tako, ampak tako nekak piše v helpu (msdn)...čemu potem?
zakj pa to ni c++ ?
kako pa naj uporabim std::string ?

BigWhale...zakaj pa se nebi smel uporabljat, sej funkcionira.
lp, klemen

jype ::

Je ze BigWhale povedu, ko sem hotu ravno v luft skocit.

Zakaj ne uporabljat strcpy, strcat in podobnih funkcij brez n:

// program, ki izpise ime, ki ga dobi kot prvi parameter:

char ime[10]; // tole alocira 10 bajtov

int main(int argc, char **argv) {
strcpy(ime, argv[1]);
printf("ime: %s\n", ime);
return 0;
}


primer, kako tak program vsujemo:

marvin:~ jure$ gdb ./test
GNU gdb 5.3-20030128 (Apple version gdb-309) (Thu Dec 4 15:41:30 GMT 2003)
Copyright 2003 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "powerpc-apple-darwin".
Reading symbols for shared libraries .. done
(gdb) run beeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Starting program: /Users/jure/test beeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Reading symbols for shared libraries . done

Program received signal EXC_BAD_ACCESS, Could not access memory.
0x90007680 in strcpy ()
(gdb) bt
#0 0x90007680 in strcpy ()
#1 0x00001eec in main ()
#2 0x00001be0 in _start (argc=2, argv=0xbfffe624, envp=0xbfffe630) at /SourceCache/Csu/Csu-46/crt.c:267
#3 0x00001a54 in start ()
(gdb)


Ugotovitev, zakaj se program sesuje prepuscam bralcu v vajo.



Pa ko je to ravno C++, zakaj ne uporabljas std::string, fogl?

Zgodovina sprememb…

  • spremenilo: jype ()

OwcA ::

ne rezumem čemu tako, ampak tako nekak piše v helpu (msdn)...čemu potem?

Malo naštudiraj kazalce.

zakj pa to ni c++ ?

C++ standard določa tudi uporabo določenih osnovnih knjižnic, natančneje vsebino imenskega prostora std. S tem, ko uporabiš iostream.h in ne iostream (brez končnice) in ne upoštevaš imenskih prostorov pišeš nestandardno in posledično neprenosljivo kodo.

kako pa naj uporabim std::string ?

Malo poglej pogooglaj.
Načeloma bi koda potem zgledala takole:
#include <iostream>
#include <string>

int main()
{
  std::string ime;
  ime = "klemen";
  std::cout << ime << std::endl;
  ime = "klemeeeeeeeeeeeeeeeeeeeeen"; // std::string samodejno raste in se krči glede na potrebe
  std::cout << ime << std::endl;
  return 0;
}
Otroška radovednost - gonilo napredka.

Jebiveter ::

jype: OT sicer, ampak... Eno vprasanje: A to programiras oz. prevajas na iBook-u?

Namrec zelo zanimivo nakljucje bi bilo, da bi se dva iBook ownerja odlocila za isto ime za svoja racunalnika! (Marvin namrec)
Certainty of death. Small chance of success. What are we waiting for?

CCfly ::

Ko kupiš iBooka je edino ustrezno ime Starvin Marvin. Nobenega naključja ni :).

Pa ne tistih .h headerjev uporabljat, ker takoj izpuščaje dobim, ko berem tako kodo. Mimogrede na desni imaš članek o C++. Preberi.

BigWhale ::

jure, tvojem programu manjka samo se funkcija, ki pozene shell... Potem bi to bil tak solski primer... ;)

fogl ::

Knjiga iz katere se učim (Matjaž Prtenjak: c++ za velike in male) ima še povsod .h , pa nisem vedu. No zdej pa vem :D
lp, klemen


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C osnova

Oddelek: Programiranje
221544 (1059) RunoTheDog
»

Dinamične strukture

Oddelek: Programiranje
141004 (893) snow
»

strcpy reče segmatation fault

Oddelek: Programiranje
101497 (1448) MasterMind
»

[c++[ bilko debilko?

Oddelek: Programiranje
171207 (969) BigWhale
»

c++ datoteke

Oddelek: Programiranje
464044 (3533) Vesoljc

Več podobnih tem