zmienne preprocesora

0

Etapy doklejania zmiennych preprocesora do tablicy przebegaja pomyslnie do momentu proby sklejenia LINE gdzie wyrzuca
"Program Received signal SIGSEGV
Stack trace is available in the 'Call Stack' tab"
dlaczego?

strcat(buff[licznik-1]," | ");
    strcat(buff[licznik-1],__DATE__);
    strcat(buff[licznik-1]," | ");
    strcat(buff[licznik-1],__TIME__);
    strcat(buff[licznik-1]," | ");
    strcat(buff[licznik-1],__FILE__);
    strcat(buff[licznik-1],":");
    strcat(buff[licznik-1],__LINE__);
2

Buduje ci się to?
__LINE__ rozwija się do liczby całkowitej, więc powinieneś mieć co najmniej ostrzenie kompilatora o konwersji int -> char *.

https://wandbox.org/permlink/UChXoPdpvhHllyJ6

prog.c:17:18: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
    strcat(buff, __LINE__);
                 ^~~~~~~~
<scratch space>:44:1: note: expanded from here
17
^~
/usr/include/string.h:133:70: note: passing argument to parameter '__src' here
extern char *strcat (char *__restrict __dest, const char *__restrict __src)
                                                                     ^
1 warning generated.

radzę zawsze używać przełącznika kompilatora -Wall by unikać takich wpadek.

Poza tym tylko kompilujesz sobie życie: https://wandbox.org/permlink/CDR0fk9BbdM7N6X5

1

Jeśli buff jest buforem tekstowym i chcesz wpisać coś w niego na konkretnej pozycji to musisz użyć buff+licznik-1 lub &buff[licznik-1]

0

Buduje ci się to?

Codelite wyswietla ostrzerzenia, lecz kompiluje, ale z poziomu konsoli już nie.

0

Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1