Problem s c

Sekcia o programovaní, programovacích jazykoch...
Používateľov profilový obrázok
Richie
Nový používateľ
Nový používateľ
Príspevky: 121
Dátum registrácie: Ut 08. Mar, 2005, 20:00
Bydlisko: Košice

Problem s c

Príspevok od používateľa Richie »

ahojte...robim zadanie do skoly v C-cku...a narazil som na problem...
pastujem kusok zdrojaku

Kód: Vybrať všetko

#include<stdio>

int main(int argc, char ** argv)
{
FILE *subor; 
char odpoved = 'a';
char *subor1;
char *subor2;

if( argc != 3 ){
   printf("\nZadali ste nespravny pocet argumentov, je potrebne zadat 3 argumenty, zadali ste: %d.\n",argc);
   printf("\nZadat nazvy suborov?(ak nie, zadate matice rucne)(a/n)\n");
   odpoved = getchar();
   if(odpoved == 'a'){
       printf("\nZadajte nazov suboru s prvou maticou:\n");
       scanf("%s", subor1);
       printf("\nZadajte nazov suboru s druhou maticou:\n");
       scanf("%s", subor2);
   }
lenze....zkompiluje to vpohode...ale ked zapnem program...a ma sa vykonat scanf("%s", subor1);...aplikacia spadne....debugger mi napisal "An access violation (Segmentation Fault) raised in your program."...cize siaham niekde do pamati kde nemam pristup...ale logicky mi to nejak nesedi....

mate tusenia kde moze byt problem? lebo ja som v koncoch...
som vam vdacny :) pekny den
AMD Phenom II X4 955 BOX Black Edition // ASUS M4N82 DELUXE // Palit GTX260 (216SP) in SLI // 4GB ADATA dual Extreme // Samsung SpinPoint F3 2x500GB RAID0 // Corsair CMPSU-750HXEU 750W
Používateľov profilový obrázok
RP
Administrátor
Administrátor
Príspevky: 2549
Dátum registrácie: St 21. Mar, 2001, 20:00
Bydlisko: Kosice

Príspevok od používateľa RP »

Zamen

char *subor1;
char *subor2;

napriklad za

char subor1[10];
char subor2[10];

a bude to fungovat. Cize

Kód: Vybrať všetko

#include<stdio>

int main(int argc, char ** argv)
{
FILE *subor; 
char odpoved = 'a';
char subor1[10];
char subor2[10];

if( argc != 3 ){
   printf("\nZadali ste nespravny pocet argumentov, je potrebne zadat 3 argumenty, zadali ste: %d.\n",argc);
   printf("\nZadat nazvy suborov?(ak nie, zadate matice rucne)(a/n)\n");
   odpoved = getchar();
   if(odpoved == 'a'){
       printf("\nZadajte nazov suboru s prvou maticou:\n");
       scanf("%s", subor1);
       printf("\nZadajte nazov suboru s druhou maticou:\n");
       scanf("%s", subor2);
   }
Používateľov profilový obrázok
kami_sama
Používateľ
Používateľ
Príspevky: 362
Dátum registrácie: Po 05. Sep, 2005, 20:00
Bydlisko: Bratislava

Príspevok od používateľa kami_sama »

ja by som povazoval za lepsie riesenie napisat takto:

Kód: Vybrať všetko

scanf ("%s\0", subor1);
scanf ("%s\0", subro2);
aby pocet znakov nebolo obmedzene. problem bol v tom, ze ti chybali ukoncovacie znaky, preto tam treba dat '\0', co je ukoncovaci znak pre string.
Používateľov profilový obrázok
Richie
Nový používateľ
Nový používateľ
Príspevky: 121
Dátum registrácie: Ut 08. Mar, 2005, 20:00
Bydlisko: Košice

Príspevok od používateľa Richie »

dakujem...
skusil som to cez

char subor1[10];
char subor2[10];

ale potom mam problem...nenapisal som tuto cast kodu:

Kód: Vybrať všetko

subor1 = argv[1];
subor2 = argv[2];
a tu uz je problem...

no a so scanf ("%s\0", subor1);...mi to tiez nefunguje nejak
AMD Phenom II X4 955 BOX Black Edition // ASUS M4N82 DELUXE // Palit GTX260 (216SP) in SLI // 4GB ADATA dual Extreme // Samsung SpinPoint F3 2x500GB RAID0 // Corsair CMPSU-750HXEU 750W
Používateľov profilový obrázok
kami_sama
Používateľ
Používateľ
Príspevky: 362
Dátum registrácie: Po 05. Sep, 2005, 20:00
Bydlisko: Bratislava

Príspevok od používateľa kami_sama »

opis chyby
mi to tiez nefunguje nejak
by som nepovazoval za dostatocne na to, aby som vedel, ze ake mas este problemy...

nedalo by sa to opisat trosku presnejsie? chybova hlaska, alebo nieco podobne..?
xaircon
Nový používateľ
Nový používateľ
Príspevky: 74
Dátum registrácie: St 27. Jún, 2007, 08:00
Bydlisko: Nová Dubnica

Re:

Príspevok od používateľa xaircon »

[quote="Richie"]d

Kód: Vybrať všetko

subor1 = argv[1];
subor2 = argv[2];
Ak nemáš v argv[1] a argv[2] len jeden znak (char) tak toto priradenie je blbosť, nefunguje, len ak by si to robil v C++ a preťažil operátor "=", ale píšeš že je to v C. Na kopírovanie charov je funkcia strcpy(char1, char2); kde char2 sa skopíruje do char1.

Ďalšia možnosť je namiesto dátovej štruktúry char použiť string, s ním sa pracuje celkovo ľahšie (aspoň pre začiatočníkov), tam by sa tuším malo dať použiť "=". Ale pokial sa nemýlim tak string je v C++.
MB: ASUS P5K Premium/WiFi-AP, CPU: E8400@3,6GHz (9x400MHz) 1,250 VCore, RAM: DDR2 2*2*2GB A-DATA Vitesta Extreme Edition 800MHz, 4-4-4-12, 2,0 VRAM , VGA: Gainward GTX260, HDD: WD 320GB AAKS - OS, 2xWD 640GB AAKS - Data OS:Ubuntu 10.10 64bit/ArchLinux 64bit BOINC
Používateľov profilový obrázok
fibre
Nový používateľ
Nový používateľ
Príspevky: 25
Dátum registrácie: Pi 24. Jún, 2005, 20:00

Re: Problem s c

Príspevok od používateľa fibre »

samozrejme, ze cecko ma kniznicu na spracovanie stringov, resp. daju sa spravit vlastne funkcie (string = pointer na pole charov, posledny znak \0)
na kopirovanie/priradovanie stringov je tu funkcia strcpy, ktora je definovana v standardnej kniznici string.h
typ char sa moze priradovat/porovnavat rovno (char je vlastne unsigned int)

ak prekladas s gcc, je dobre prekladat s volbami -pedantic -Wall, ktory ti vypise mozne chyby

tu je funkcny kod, snad pomoze

Kód: Vybrať všetko

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
  FILE *subor;
  char odpoved;
  char subor1[100];
  char subor2[100];

  if( argc == 3 )
  {
    strcpy(subor1,argv[1]);
    strcpy(subor2,argv[2]);
  }
  else
  {
    printf("Zadali ste nespravny pocet argumentov, je potrebne zadat 3 argumenty,"
           "zadali ste: %d.\n",argc);
    printf("Zadat nazvy suborov? (ak nie, zadate matice rucne) (a/n)\n");
    scanf("%c", &odpoved);
    if(odpoved == 'a')
    {
      printf("Zadajte nazov suboru s prvou maticou:\n");
      scanf("%s", subor1);
      printf("Zadajte nazov suboru s druhou maticou:\n");
      scanf("%s", subor2);
    }
    else
    {
      printf("Ako chcete..\n")
      return 1;
    }
  }
  printf("%s %s\n", subor1, subor2);
  return 0;
}
--> Desktop: CPU: AMD Athlon II X4 645, MB: Gigabyte 970A-UD3, VGA: Asus HD5450 Silent, RAM: Corsair 4x4GB Vengeance, HDD: Samsung Spinpoint HD103SJ 1TB, PSU: Seasonic S12II-520W, skrinka: Fractal Design R3 Black Pearl, monitor: LG Flatron W2220P, Razer BlackWidow (nemá chybu), Behringer MS-40

Návrat na "Programovanie"