Linux -> Windows C program

poruka: 8
|
čitano: 1.922
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Linux -> Windows C program

Pozdrav.

Imam problem, naime, imam potpuno ispravan C kod koji radi u Linuxu u Geany compileru.

Sad, htio bi istu stvar (program) imat i u .exe i pokretat ga u windowsima. Kako sam cuo da se moze napisat kod u C++-u, napravio sam to, no ne radi, barem ne kako bi trebalo. Ispravio sam greške koje mi je javljao, tipa scanf u scanf_s i slicno, i nakon svih tih greski, napokon mi pokrene pogram, no zastane i crasha se na prvom citanju stringa (odnosno niza charova, jer c nema string). Nakon crasha javi gresku "Access violation executing location ...".

Linija je simple as

scanf_s(" %s", x1);

sa x1 definiranim kao char x1[20];

 

Probao sam googlati i potraziti na forumu ali bezuspjesno.

Poruka je uređivana zadnji put pet 17.1.2014 12:04 (Albatross).
 
0 0 hvala 0
12 godina
neaktivan
offline
Re: Linux -> Windows C program
Albatross kaže...
scanf_s(" %s", x1);

sa x1 definiranim kao char x1[20];

 

Probao sam googlati i potraziti na forumu ali bezuspjesno.

Izbriši razmak koji imaš prije %s. Isto to možeš napraviti i pomoću gets(x1).

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
14 godina
neaktivan
offline
Re: Linux -> Windows C program
Albatross kaže...

Imam problem, naime, imam potpuno ispravan C kod koji radi u Linuxu u Geany compileru.

Geany je editor, GCC je kompajler koji vjerojatno koristiš na linuxu. Radi manje boli koristi MinGW na windowsima (port GCC-a), jer je MS-ov C kompajler zapeo u prethistoriji. No to samo ako koristiš C, ako je C++ u pitanju onda je i MSVC kompajler dobar.

 

Albatross kaže...
Sad, htio bi istu stvar (program) imat i u .exe i pokretat ga u windowsima. Kako sam cuo da se moze napisat kod u C++-u, napravio sam to, no ne radi, barem ne kako bi trebalo.

Možeš ti taj isti program napisati i u C++-u, nema beda. Ali i C kod ti mora uredno raditi na windowsima, nema potrebe za konverzijama.

 

Albatross kaže...
Ispravio sam greške koje mi je javljao, tipa scanf u scanf_s i slicno

Iz ovoga zaključujem da si koristio Visual Studio, odnosno MSVC kompajler na windowsima jer samo on ima tu debilnu naviku forsiranja "sigurnih" funkcija.

 

Albatross kaže...
i nakon svih tih greski, napokon mi pokrene pogram, no zastane i crasha se na prvom citanju stringa (odnosno niza charova, jer c nema string). Nakon crasha javi gresku "Access violation executing location ...".

Linija je simple as

scanf_s(" %s", x1);

sa x1 definiranim kao char x1[20];

Ako pogledašreferencu za svaku od tih sigurnih funkcija primijetit ćeš da sve imaju jedan dodatni parametar kojim trebaš navesti veličinu memorijskog spremnika (u tvom slučaju polja charova).

 

Dakle pravilan poziv funkcije scanf_s u tvom slučaju bi bio:

scanf_s("%s", x1, 20);

 

No, ako je upisani string dulji od 20 znakova ništa neće biti kopirano u polje. Da bi doskočio tome možeš navesti i broj znakova u formatu, pa bi onda imao:

scanf_s("%19s", x1, 20);

 

To će kopirati prvih 19 znakova plus null terminator u polje x1. Neovisno o tome je li korisnik upisao više od toga.

 

Razlog zašto u formatu imaš 19 znakova, a navedena veličina polja je 20 bajta je iz razloga što si želiš ostaviti jedan bajt prostora za null terminator.

To understand what recursion is, you must first understand recursion.
Poruka je uređivana zadnji put pet 17.1.2014 19:56 (rustweaver).
12 godina
neaktivan
offline
Re: Linux -> Windows C program
rustweaver kaže...
Iz ovoga zaključujem da si koristio Visual Studio, odnosno MSVC kompajler na windowsima jer samo on ima tu debilnu naviku forsiranja "sigurnih" funkcija.

To su stvarno glupa upozorenja, ali naravno ima načina za isključiti ih. Otvorite Property Pages, odaberete All configuration, pa Preprocessor, i tu kliknete na Preprocessor Definition, otvorit će vam se prozor za uređivanje i tu unesite "_CRT_SECURE_NO_WARNINGS".

Naravno ovo se kosi sa "best practice", čak se preporučuje da se onemogući kompajliranje u slučaju warningsa, ali to u slučaju MS-ovog C-a nema smisla. Kao što je @rustweaver rekao, to je davno zastarilo...

Crk'o Marshall!
16 godina
neaktivan
offline
Linux -> Windows C program

Kod VS 2013 scanf više nije pod upozorenjima, nego pod greškama koje onemogućuju kompajliranje, a printf nije ni pod upozorenjima, i to po defaultnim postavkama.

A inače uopće ne treba navesti biblioteku cstdio da bi funkcije za konzolni upis i ispis radile. Ma ima toga još, što je pomalo nelogično, npr ne treba navesti biblioteku cmath da bi funkcija sqrt radila, sasvim fino je navede u intellisense-u i bez biblioteke u headeru, što je valjda logično za C# gdje je klasa math u namespacu system, ali nije baš logično za C++. Pa mi intellisense napravi petlje, što u C# ne radi, što je dobra stvar, čudim se kako to nisu napravili za C#.

Poruka je uređivana zadnji put sub 18.1.2014 12:38 (Floki).
 
0 0 hvala 0
12 godina
neaktivan
offline
Re: Linux -> Windows C program
Floki kaže...

Pa mi intellisense napravi petlje, što u C# ne radi, što je dobra stvar, čudim se kako to nisu napravili za C#.

Kako misliš napravi petlje? U C#-u možeš napisati for lupiti tab i dobiješ kostur petlje, kao i za foreach, dobiješ nešto tipa:

foreach(var item in list)

{

 

}

Crk'o Marshall!
16 godina
neaktivan
offline
Re: Linux -> Windows C program
royalhero kaže...
Floki kaže...

Pa mi intellisense napravi petlje, što u C# ne radi, što je dobra stvar, čudim se kako to nisu napravili za C#.

Kako misliš napravi petlje? U C#-u možeš napisati for lupiti tab i dobiješ kostur petlje, kao i za foreach, dobiješ nešto tipa:

foreach(var item in list)

{

 

}

To je dodatna mogućnost koju VS 2013 u C++ ima, a u C# nema, ako se preko intellisensea odabere petlja, stvori se tijelo petlje. Inače kod tab su konzistentni, ali kod ovoga nisu.

Poruka je uređivana zadnji put pon 20.1.2014 13:33 (Floki).
12 godina
neaktivan
offline
Re: Linux -> Windows C program

Aha, evo vidim, nisam probao C++ prije u VS 2013.

 

Otišli smo u offtopic... :)

Crk'o Marshall!
Poruka je uređivana zadnji put uto 21.1.2014 11:57 (royalhero).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice