Stránka 1 z 1

Problem s adresou v C

Napsal: úte 29. dub 2008, 11:11
od richienko
ahojte...robim zadanie do skoly v C-cku...a narazil som na problem...
pastujem kusok zdrojaku

Kód: Vybrat vše

#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

Napsal: úte 29. dub 2008, 13:30
od WoiTa
místo
char *subor1;
char *subor2;

by mělo být
char subor1[velikost];
char subor2[velikost];

pak už ti to pojede

Napsal: čtv 1. kvě 2008, 20:24
od Warran
Problém je v tom, že máš sice ukazatele na char, což je vlastně taky String, ale ten ukazatel není inicializovaný. V případě, že je to lokální proměnná, měl by mít hodnotu nula, v případě globální náhodnou, pokud se nepletu.
Takže musíš ty ukazatele inicializovat.
a) jak píše Woita, tak vlastně uděláš pole char(ů), což je vlastně String.
b) použij malloc

Kód: Vybrat vše

    // alokace pameti pro retezec o deviti znacich (desaty znak je pro ukoncovaci znak '\0' a zaroven kontrola uspesnosti
if ((subor1 = (char *) malloc(10 * sizeof(char))) == NULL) { 
    printf("Nepodarilo se alokovat pamet,  program zkonci");'
    exit (1);
}        
 /* to same pro subor2 */
 

Napsal: pon 5. kvě 2008, 00:38
od €agle
Jenom aby později nedošlo k omylu, tak string jako takový je třída v C++, v běžném C ho nenajdeš (tzn char* != string, ačkoli string lze implicitně typovat na char*)... Char* je prostě pointer na pole znaků, které se dá interpretovat jako text, nic víc, nic míň...