Hirdetés

2024. május 1., szerda

Gyorskeresés

Hozzászólások

(#1151) skylaner válasza Jester01 (#1150) üzenetére


skylaner
senior tag

Igazad van.
Persze lehetne így is: while((a=getchar())!='\n') {.....}

MÁS:

Hogy/mivel tudom megnézni,hogy a program futása során mennyi memóriát használt ?

(#1152) Jester01 válasza skylaner (#1151) üzenetére


Jester01
veterán

A valgrind egy hasznos eszköz (linuxon).

Jester

(#1153) ReJim


ReJim
őstag

sziasztok c-ben hogyan tudok udp-n adatot küldeni?
(server linuxon, kliens winen. gcc fordítók, winen devc++ és mingw)

ez a kód jó lenne nekem, de winre nem találok headert:

/*********************** udpclient.c ***********************/\

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h> /* memset() */
#include <sys/time.h> /* select() */

#define REMOTE_SERVER_PORT 1500
#define MAX_MSG 100


int main(int argc, char *argv[]) {

int sd, rc, i;
struct sockaddr_in cliAddr, remoteServAddr;
struct hostent *h;

/* check command line args */
if(argc<3) {
printf("usage : %s <server> <data1> ... <dataN> \n", argv[0]);
exit(1);
}

/* get server IP address (no check if input is IP address or DNS name */
h = gethostbyname(argv[1]);
if(h==NULL) {
printf("%s: unknown host '%s' \n", argv[0], argv[1]);
exit(1);
}

printf("%s: sending data to '%s' (IP : %s) \n", argv[0], h->h_name,
inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));

remoteServAddr.sin_family = h->h_addrtype;
memcpy((char *) &remoteServAddr.sin_addr.s_addr,
h->h_addr_list[0], h->h_length);
remoteServAddr.sin_port = htons(REMOTE_SERVER_PORT);

/* socket creation */
sd = socket(AF_INET,SOCK_DGRAM,0);
if(sd<0) {
printf("%s: cannot open socket \n",argv[0]);
exit(1);
}

/* bind any port */
cliAddr.sin_family = AF_INET;
cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);
cliAddr.sin_port = htons(0);

rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr));
if(rc<0) {
printf("%s: cannot bind port\n", argv[0]);
exit(1);
}


/* send data */
for(i=2;i<argc;i++) {
rc = sendto(sd, argv[i], strlen(argv[i])+1, 0,
(struct sockaddr *) &remoteServAddr,
sizeof(remoteServAddr));

if(rc<0) {
printf("%s: cannot send data %d \n",argv[0],i-1);
close(sd);
exit(1);
}

}
return 1;
}

valakinek valami ötlete?

</end.?>

(#1154) ReJim válasza ReJim (#1153) üzenetére


ReJim
őstag

megvan, találtam megoldást, csak a devc-bena projekthez kellett állítani egy paramétert...

</end.?>

(#1155) bodisjani


bodisjani
csendes tag

Sziasztok!

Most kezdek C-vel bajlódni és az első lépéseknél el is akadtam: A fordító Dev-C++, az oprendszer Vista, a probléma pedig az, hogy a prgram lefordítódik, le is fut, csak azonnal be is záródik az ablak. Az egészből csak egy villanást látok. ???

Előre is köszi!!

(#1156) Gyuri16 válasza bodisjani (#1155) üzenetére


Gyuri16
senior tag

a programod lefut rendben.
vagy nyiss egy konzolt, es onnan inditsd el, akkor latod a kimenetet, vagy tegyel a programod vegere egy getchar()-t (ez var amig megnyomsz valamilyen billentyut)

Nem vagyok egoista, csak uborkagyalu!

(#1157) bodisjani válasza Gyuri16 (#1156) üzenetére


bodisjani
csendes tag

Köszi!

Igaz csak enterre tér vissza, de mindegy.
így már lett egy működő programom :C

Esetleg tudnál segíteni, honnan lehet értelmes mintaprogikhoz és valami oktatóanyaghoz jutni?

(#1158) skylaner


skylaner
senior tag

Megtudnátok mondani, hogy az alábbi kód, hogyan/miért működik pointerek nélkül?

#include <stdio.h>
#define csere(a, b) { int c; c=a; a=b; b=c; }

int main()
{
int a=4, b=9;
csere(a,b);
printf("%d %d",a,b); // 9 4
return 0;
}

(#1159) emvy válasza skylaner (#1158) üzenetére


emvy
nagyúr

Mert valojaban igy nez ki:

#include <stdio.h>

int main()
{
int a=4, b=9;
int c;
c=a; a=b;b=c;
printf("%d %d",a,b); // 9 4
return 0;
}

Tehat nem tortenik fuggvenyhivas.

while (!sleep) sheep++;

(#1160) Gyuri16 válasza skylaner (#1158) üzenetére


Gyuri16
senior tag

makrot definialtal. ezt a c preprocessora feldolgozza, es a fordito mar nem latja hogy ott mi volt eredetileg, tehat addigra mar be van helyettesitve a makro teste, nincs fuggvenyhivas
wiki: [link]
gcc doksi: [link]

mod: sokaig kinlodtam ezzel a bonyolult esszevel, megeloztek :B

[ Szerkesztve ]

Nem vagyok egoista, csak uborkagyalu!

(#1161) skylaner


skylaner
senior tag

Lenne egy egyszerű kliens-szerver progi,amiben a két fél tud egymással chatelni ill. a kliens fájlokat tölthet le a szerverről.

A kérdésem a recv()-el kapcsolatban lenne.
Ha elküldök egy üzenetet:

send(client_sock,"download_over",13,0);

Akkor a fogadásnál szükség van erre?

#define BUFF_SIZE 1024
.......
char msg[BUFF_SIZE];
int len;
......
len=recv(sock,msg,BUFF_SIZE,0);
msg[len]='\0';
if(strcmp(msg,"download_over")==0) { ....}

Tehát le kell zárni a stringet, vagy ez automatikusan megtörténik ?
/esetleg a send-nél 14-t kellene megadni, és akkor másolódik át automatikusan a lezáró '\0' ? /

[ Szerkesztve ]

(#1162) Jester01 válasza skylaner (#1161) üzenetére


Jester01
veterán

Igen, a lezáró nulla csak akkor megy át, ha 14 byteot küldesz. Jelen esetben amúgy nem is kell lezárni: if (len == 13 && strncmp(msg, "download_over", 13) == 0) ....

Ja és a recv visszaadhat hibakódot (-1) vagy éppenséggel BUFF_SIZE értéket is és ezekben az esetekben a msg[len]='\0'; felettéb szerencsétlen lenne (de gondolom a hibakezelést csak innen a postból hagytad ki).

Jester

(#1163) skylaner válasza Jester01 (#1162) üzenetére


skylaner
senior tag

Kösz, eszembe se jutott ez az n-ig összehasonlító fgv.

Visszatérve egy korábbi kérdésemre: valgrind

Feltettem ubuntut,valgrind-et. Futtattam --leak-check=full --showreachable=yes paraméterekkel, sok okosságot kiírt, de hogy tudnám azt megnézni h összesen mennyi memóriát használt a progi, ne csak azt amit malloc-al foglaltam le? Mindent, lokális,globális,fgv argumentumok változói stb...
Vagy nincs ilyen lehetőség?

(#1164) Jester01 válasza skylaner (#1163) üzenetére


Jester01
veterán

Hát a globális (illetve statikus) változók azok benne vannak a program fejlécében (objdump -h kimenetben data+bss). Lokális változók méreténél (ideértve a függvényargumentumokat is) nem tudom mit szeretnél tudni, esetleg a maximális verem méretet? Mivel ismereteim szerint linux alatt a verem nem csökken, ezért azt elvileg ki lehet nyomozni a futás végén. Például gdb-vel breakpoint az exit függvényre és a /proc/<pid>/maps fájlban a stack bejegyzésből.

[ Szerkesztve ]

Jester

(#1165) skylaner válasza Jester01 (#1164) üzenetére


skylaner
senior tag

Na pl:

typedef struct szam{
int a;
int b;
} SZAM;

void szum(int a,int b)
{
printf("%d\n",a+b);
}
int main()
{
SZAM* sz;
sz=(SZAM*)malloc(sizeof(SZAM));
sz->a=4;
sz->b=5;
szum(sz->a,sz->b);
free(sz);
sz=NULL;
return 0;
}

sz: 4 byte
*sz: 8byte
2 int másolat: 8byte

Tehát ennek összesen akkor min 20byte memória kell a program egy adott pontján.
Valami ilyesmire gondoltam.

(#1166) Jester01 válasza skylaner (#1165) üzenetére


Jester01
veterán

A valgrindban van egy "massif" eszköz is, az nem jó?

#-----------
snapshot=64
#-----------
time=124348
mem_heap_B=8
mem_heap_extra_B=8
mem_stacks_B=1008
heap_tree=detailed
n1: 8 (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
n0: 8 in 1 place, below massif's threshold (01.00%)

[ Szerkesztve ]

Jester

(#1167) kampi_


kampi_
csendes tag

Sziasztok!

Tudja valaki, hogy hogyan lehet megoldani C-ben azt, hogy létrehozok egy process-t, de úgy mintha run as-szel futttatnám? Tehát bekérem a felhasználónevet, meg a jelszót, meg hogy milyen process process-t nyissak meg, és az eredmény az hogy megnyílik a program csak úgy mintha az adott felhasználó nevében nyitnám meg.

Thx, kampi

(#1168) kampi_ válasza kampi_ (#1167) üzenetére


kampi_
csendes tag

Hi!

Azt hiszem megtaláltam. Ha minden igaz akkor a CreateProcessWithLogonW függvénnyel tudok ilyet csinálni. Ha nem, akkor légyszíves szóljatok, mert hiába fogok próbálkozni :)

Thx, kampi

(#1169) kampi_


kampi_
csendes tag

Hi!

Tudja valaki hogy hogyan kell használni a CreateProcessWithLogonW fv-t? Vagy csak én vagyok béna, és azért nem jó?

Így próbálom,de nem történik semmi, a CreateProcessWithLogonW mindig 0-t ad vissza,vagyis valamilyen hiba van,csak nem találom meg hogy mi? :(

STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcInfo;
memset(&ProcInfo, 0, sizeof(ProcInfo));
memset(&StartInfo, 0 , sizeof(StartInfo));
StartInfo.cb = sizeof(StartInfo);
int bFuncRetn = CreateProcessWithLogonW(
(LPCWSTR)user,
(LPCWSTR)domain,
(LPCWSTR)password,
LOGON_WITH_PROFILE,//LOGON_NETCREDENTIALS_ONLY,
(LPWSTR)applicationname,
NULL,
CREATE_UNICODE_ENVIRONMENT,//CREATE_NEW_PROCESS_GROUP,
NULL,
NULL,
(LPSTARTUPINFOW)&StartInfo,
&ProcInfo
);

CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
printf("\n\nCreateProcessWithLogonW returns :: %d", bFuncRetn);

Előre is köszönöm a segítséget!

kampi

(#1170) Jester01 válasza kampi_ (#1169) üzenetére


Jester01
veterán

1) megnézted, hogy a GetLastError mit mond?
2) van joga a felhasználónak a desktophoz? ("The application must add permission for the specified user account to the specified window station and desktop, even for WinSta0\Default.")
3) esetleg nem unicode stringeket adsz be neki?

Jester

(#1171) kampi_


kampi_
csendes tag

Hi!

A GetLastError 1326-ot ad vissza, vagyis Logon Failure-el szállt el. Közben rájöttem, hogy az volt a gáz, hogy nem Unicoe típust hazsnáltam, hanem csak sima char-t nem wchar_t -t. De ezt már kijavítottam. Most az a bajom, hogy ha lokális felhasználóval akarok egy process-t nyitni, akkor műkődik, viszont ha egy olyan userral ami domain-tag akkor márnem megy. GetLastError szintén 1326-ot ad vissza.

Valakinek valami ötlet?

Előre is köszi!

kampi

(#1172) kampi_


kampi_
csendes tag

Hi!

Boccs, hogy ennyit írok. Szóval mostmár sikerült megcsinálni. A LOGON_WITH_PROFILE-t kellett átírni LOGON_NETCREDENTIALS_ONLY-ra. Most viszont az a bajom, hogy a process elindul, de a másik user neve alatt, hanem vagy az enyém alatt, vagy pedig system-ként látja a taskmanager. Ez mitől lehet? Ebben segítsetek légyszíves, mert fontos lenne.

Köszönöm!

kampi

(#1173) cellpeti


cellpeti
veterán

Nem akarok hülyeséget kérdezni,de mibe lehet C.be programozni, kompatibilisnek kell lennie a Turbo C 2.0-val???

Visual C vagy Visual Studio 2008 vagy melyik?

Tigris, tigris, csóvafény...

(#1174) gygabor88 válasza cellpeti (#1173) üzenetére


gygabor88
tag

CodeBlocks, Dev-C++, Visual C++ Express (azt hiszem be kell neki állítani valahol, hogy unmanaged C kódot akarsz írni). Az első kettő elég minimális IDE, de kezdetben elég lesz.

(#1175) cellpeti válasza gygabor88 (#1174) üzenetére


cellpeti
veterán

Szia!

Nekem mindenképp akkor a Visual Studio kellene,de csak C++ engedélyez. Inkább ebbe a progiba vizsgáznék,mint a Turbo C 2.0-n. Ez a progi kell a féléves vizsgához progból. Most leszedtem megint,de még mindig csak C++ enged írni. Nem tudod,hogy hol kell átállítani?

Erről beszélek!

[ Szerkesztve ]

Tigris, tigris, csóvafény...

(#1176) gygabor88 válasza cellpeti (#1175) üzenetére


gygabor88
tag

Először mindig új projectet hozz létre és azon belül fájlokat. Valahol a new project menupont alatt kell beállítani, hogy C-ben fogod írni.

[ Szerkesztve ]

(#1177) sghc_toma válasza gygabor88 (#1176) üzenetére


sghc_toma
senior tag

nem szukseges beallitani, ha .c a kiterjesztes, automatikusan C-kent fordit..
amugy a project Properties|C/C++|Advanced|Compile As helyen lehet beallitani az egesz project-re (ezt felulirja a kiterjesztes).. adott file-ra is be lehet allitani, ekkor ertelemszeruen a file Properties lapjan kell beallitani, nem a project-en..

in asm we trust

(#1178) cellpeti válasza gygabor88 (#1176) üzenetére


cellpeti
veterán

Értem,de én egyikbe se találtam ilyet.

Kép1

Tigris, tigris, csóvafény...

(#1179) gygabor88 válasza cellpeti (#1178) üzenetére


gygabor88
tag

Nekem nincs a gépemen VS, szóval csak az írtam, ahol értelemszerűen lennie kellene. Amúgy #1177.

(#1180) sghc_toma válasza cellpeti (#1178) üzenetére


sghc_toma
senior tag

csinalsz egy Empty Project-et, majd Project|Add New Item|C++ File (.cpp), filenevnek meg egy .c kiterjesztesu nevet adsz meg..

in asm we trust

(#1181) cellpeti válasza sghc_toma (#1180) üzenetére


cellpeti
veterán

:R

Tigris, tigris, csóvafény...

(#1182) kampi_


kampi_
csendes tag

Sziasztok!

Tudna valaki segíteni nekem a CreateProcessWithLogonW függvénnyel kapcsolatban?
A problémám az vele, hogy létre tudok hozni egy processt pl Total commandert, de:
- bennt a cégnél műkődik is, mert egy admin usert adok meg, és hozzáférek olyan dolgokhoz amikhez csak ezzel a userral tudok. Ezzel eddig semmi gáz. Ha megnézem Task Managerben, akkor ott viszont nem úgy látszik, hogy az admin userrel futtatom a process-t hanem a SYSTEM futtatja a process-t. Na mindegy, végülis műkődik, csak gondoltam megkérdem ezt is hátha valaki tudja hogy miért?
- otthon viszont(hazaviszem a laptopom) megpróbálom ugyanezt (semmit nem változtattam a kódon) és meg akarom nyitni az admin userrel ugyanúgy a Total commandert (már be voltam jelentkezve a gépre vele, így létrejöt a profil, tehát elvileg már akármit tudok run as-ként futtatni), és meg is nyílik, viszont itt már nincsenek meg a jogaim. Most nem hálózati jogokra gondolok, hanem pl az a user amivel be vagyok lépve, nem admin, tehát pl nem tudok egy fájlt létrehozni a c:\-ben. Az admin userrel viszont simán tudok. Van egy lokális admin user is, azzal is megpróbáltam. Megadtam a usert, jelszót, domainnak meg a gépnevet, és ugyanúgy nincs jogom hozzá. Mindkét esetben (otthon az admin és a lokál admin esetében is) task managerben úgy látszik hogy a processt az a user futtaja aki be van jelentkezve.

Erre van valakinek valami ötlete?

Előre is köszi a segítséget!

Kampi

(#1183) cellpeti


cellpeti
veterán

üdv! Írtam egy progit a Code::Blocks-ba,de nem engedi futtatni(F8).
Ez miért lehet?

A fájlnak .c kiterjesztést adtam.
Tudnátok segíteni? :U

Tigris, tigris, csóvafény...

(#1184) gygabor88 válasza cellpeti (#1183) üzenetére


gygabor88
tag

Nyilván egy hibaüzenetet látnunk kellene. De tippre azt mondom, hogy nem tetted projectbe, mert ha abba tetted volna, akkor nem kellett volna .c kiterjesztést megadni a fájlnak, hiszen eleve .c fájlt készít a C projectbe.

(#1185) -=Lord Tom=-


-=Lord Tom=-
senior tag

Segítsetek plz, miért ugorja át a műveletjel megadását/miért nem lesz a muvjelnek megfelelő értéke?

#include <stdio.h>

int main(){
int szam, szam2;
char muvjel;

// Adatok beolvasása
printf("Kerem az elso szamot: ");
scanf("%d", &szam);

printf("\n\nMuvelet: ");
scanf("%c", &muvjel);

printf("\n\nKerem a masodik szamot: ");
scanf("%d", &szam2);

//Tényleges műveletvégrehajtás
if (muvjel=="+"){
printf("%d %c %d = %d ", szam, muvjel, szam2, (szam+szam2));
}
else if (muvjel=="-"){
printf("%d %c %d = %d ", szam, muvjel, szam2, (szam-szam2));
}
else if (muvjel=="*"){
printf("%d %c %d = %d ", szam, muvjel, szam2, (szam*szam2));
}
else if (muvjel=="/"){
printf("%d %c %d = %d ", szam, muvjel, szam2, (szam/szam2));
}

system("pause");
}

(#1186) cellpeti válasza gygabor88 (#1184) üzenetére


cellpeti
veterán

Sziasztok!

A Dev C++ nem ismeri a pontosvesszőt? :U

Tigris, tigris, csóvafény...

(#1187) -=Lord Tom=- válasza cellpeti (#1186) üzenetére


-=Lord Tom=-
senior tag

De, csak át kell állítani a: tools - configure shortcuts-nál a ctrl+. ill törölni azt. (a magyar kiosztással akad)

(#1188) cellpeti válasza -=Lord Tom=- (#1187) üzenetére


cellpeti
veterán

köcce :R

Tigris, tigris, csóvafény...

(#1189) sghc_toma válasza -=Lord Tom=- (#1185) üzenetére


sghc_toma
senior tag

az elozo beolvasas utan ottmarad az stdin-en egy '\n', es ezt olvassa be a masodik scanf.. csinalhatod azt, hogy olvasas elott kiurited az stdin-t mondjuk igy:

char c; while ((c = getc(stdin)) != EOF && c != '\n');

ja, es az osszehasonlitasnal ne "-t hasznalj, hanem '-t.. a "+" igazabol ket karakter, a vegen van egy '\0'..

in asm we trust

(#1190) Jester01 válasza sghc_toma (#1189) üzenetére


Jester01
veterán

Rossz példa! Itt a c-nek int típusúnak kell lennie, különben az EOF ellenőrzés nem lesz jó.

Egyébként bevett tanács, hogy billentyűzetről nem olvasunk scanf-el. Helyette fgets + sscanf páros javallott.

Jester

(#1191) sghc_toma válasza Jester01 (#1190) üzenetére


sghc_toma
senior tag

rosszul emlekeztem, a getc tenyleg int-et ad vissza, es valoban elofordulhat olyan implementacio, ahol az ellenorzes nem lesz jo.. bar en meg nem lattam olyat, hogy az EOF ne -1 lett volna..

in asm we trust

(#1192) Jester01 válasza sghc_toma (#1191) üzenetére


Jester01
veterán

És olyat láttál ahol a char nem előjeles? ;)

Jester

(#1193) sghc_toma válasza Jester01 (#1192) üzenetére


sghc_toma
senior tag

ehh, ezt beneztem :B

in asm we trust

(#1194) -=Lord Tom=- válasza Jester01 (#1192) üzenetére


-=Lord Tom=-
senior tag

Köszi mindkettőtöknek! :)

(#1195) cellpeti


cellpeti
veterán

A Dev C++ tud olyat,hogy nem ugrik el a program végén,mint a C-Free? :U

Tigris, tigris, csóvafény...

(#1196) cellpeti


cellpeti
veterán

Sziasztok!

A Dev C++ról lemondtam.

Feltettem a C-Free-t,ezzel megírom a progit,majd mikor F5-vel lefuttatom egy ilyen kicsi ablakba fut le. Egész idáig jó volt,már régebben is írtam benne progit,akkor ok volt. Esetleg aki ilyet használ,az segíthetne nekem.

Tigris, tigris, csóvafény...

(#1197) gaben


gaben
aktív tag

Hello!
Azt hogy tudom megoldani,hogy egy sima vektroból mondjuk törlöm a 3. elemet ill. egy mátrixnak mondjuk a középső sorát ?

[ Szerkesztve ]

(#1198) Gyuri16 válasza gaben (#1197) üzenetére


Gyuri16
senior tag

vegyel egy tombot: 0,1,2,3,4,5,6. ha ebbol ki akarod dobni a harmadikat, akkor ez marad: 0,1,2,4,5,6. mi tortent: a harmas helyere kerult a negyes, annak a helyere az otos es igy tovabb, majd az egesz tomb hossza egyel kisebb lett.

Nem vagyok egoista, csak uborkagyalu!

(#1199) gygabor88 válasza gaben (#1197) üzenetére


gygabor88
tag

Vektorból erase függvénnyel tudsz törölni tetszőleges elemet. A mátrixot nem tudom hogy valósítod meg, így arra nem tudok megoldást mondani.

[ Szerkesztve ]

(#1200) Csuty12


Csuty12
csendes tag

Sziasztok,

két hete kezdtem tanulni programozni c++ 3.1ben, az érdekelni hogy megoldható az hogy Vista-n normálisan fusson? A problémám az lenne hogy nem tudom teljes képernyőre kirakni, a másik pedig az hogy angol billentyűkiosztást használ a program bent, lehet valahogy ezt magyarrá varázsolni? Így kicsit macerás a () és egyebek..

u.i.: azért ezt a programot használom mert ahol oktatják ott is ez van és így egyszerűbb..

Köszönöm

Copyright © 2000-2024 PROHARDVER Informatikai Kft.