#include char..." /> #include char..." />

C strcat Chyba segmentácie

Sekcia: Programovanie 29.06.2009 | 11:49
Avatar st1gd3r   Používateľ
Ahoj. Takže mám tu jeden problémik chcel som si spraviť funkciu na IRCčko do ktorej by som zadal channel a správu a ona by mi vypľula "PRIVMSG channel: Správa" ... Vo funkcii som dal správu vypísať to ide ok. Ale potom skočí chyba segmentácie.

/* Kód */

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

char send_msg(char *msg,char *channel)
{

char privmsg[] = "PRIVMSG ";
strcat(privmsg,channel);
strcat(privmsg, " :");
strcat(privmsg,msg);
printf("%s\n",privmsg);

return *privmsg;
}


int main()
{

send_msg("Ahoj","Blabla");

}

/* Kompilovanie */

gcc strcat.c -o strcat -g

Error nebol žiadny ani warning.

/* Spustenie */

./strcat
PRIVMSG Blabla :Ahoj
Chyba segmentácie

/* gdb strcat */

Starting program: /home/st1gd3r/Desktop/C/strcat
PRIVMSG Blabla :Ahoj

Program received signal SIGSEGV, Segmentation fault.
0x413a2061 in ?? ()

Pri tom istom kóde keď zmením

return *privmsg;

na

return privmsg;

Tak:
gcc strcat.c -o strcat -g
strcat.c: In function ‘send_msg’:
strcat.c:14: warning: return makes integer from pointer without a cast
strcat.c:14: warning: function returns address of local variable

A gdb:

Starting program: /home/st1gd3r/Desktop/C/strcat
PRIVMSG Blabla :Ahoj

Program received signal SIGSEGV, Segmentation fault.
0x413a2061 in ?? ()


Všetky rady ako to opraviť vítané. Predom dík.

st1gd3r





    • Re: C strcat Chyba segmentácie 29.06.2009 | 11:59
      Avatar Michal Nánási Ubuntu 11.04  Používateľ
      strcat nealokuje priestor pre dany string, takze ked ho pouzivas tak, ako ho pouzivas, tak potom zapisuje tam, kam nema. Vysledna chybova sprava je taka potom preto, lebo si program prepisal stack a podobne.

      Rady:

      char privmsg[]=(char*)malloc(strlen(msg)+strlen(channel)+nejaka konstanta);

      Hi! I'm a .signature virus! Copy me into your ~/.signature to help me spread!
      • Re: C strcat Chyba segmentácie 29.06.2009 | 12:34
        Avatar st1gd3r   Používateľ
        THX už to ide ako má :>