Problem s adresou v C

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
richienko
Nováček
Nováček
Registrován: 19. srp 2007

Problem s adresou v C

Příspěvek 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
WoiTa
Mírně pokročilý
Mírně pokročilý
Uživatelský avatar
Registrován: 07. říj 2004
Bydliště: Chrudim, Brno
Kontaktovat uživatele:

Příspěvek od WoiTa »

místo
char *subor1;
char *subor2;

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

pak už ti to pojede
Warran
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 23. zář 2005
Bydliště: Praha

Příspěvek 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 */
 
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek 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íň...
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Odpovědět

Zpět na „Programování a web“