Pytania otagowane jako c

C jest językiem programowania ogólnego przeznaczenia używanym do programowania systemu (system operacyjny i wbudowane), bibliotek, gier i platform. Tego znacznika należy używać z ogólnymi pytaniami dotyczącymi języka C, zgodnie z definicją w normie ISO 9899 (najnowsza wersja, 9899: 2018, o ile nie określono inaczej - także znaczniki specyficzne dla wersji za pomocą c89, c99, c11 itd.). C różni się od C ++ i nie należy go łączyć ze znacznikiem C ++ bez uzasadnionego powodu.

7
Czy mogę użyć NULL jako podstawienia wartości 0?
Czy mogę używać NULLwskaźnika jako zamiennika wartości 0? Czy jest w tym coś złego? Jak na przykład: int i = NULL; jako zamiennik dla: int i = 0; W ramach eksperymentu skompilowałem następujący kod: #include <stdio.h> int main(void) { int i = NULL; printf("%d",i); return 0; } Wynik: 0 Rzeczywiście …

10
Nie można skompilować programu C na komputerze Mac po aktualizacji do Catalina 10.15
Jest poprzednie pytanie Nie można skompilować programu C na Macu po aktualizacji do Mojave , a odpowiedzi na to pytanie obejmowały większość wariantów tego, co poszło nie tak. Teraz - od poniedziałku 2019-10-07 - możesz uaktualnić system do macOS Catalina 10.15. Ponownie, podczas aktualizacji, /usr/includekatalog został zdmuchnięty przez aktualizację, mimo …
64 c  xcode  macos  gcc  macos-catalina 

4
Czego potrzeba pustych nawiasów klamrowych „{}” na końcu tablicy struktur?
Uderzyłem trochę kodu c w jądrze Linuksa: static struct ctl_table ip_ct_sysctl_table[] = { { .procname = "ip_conntrack_max", .maxlen = sizeof(int), .mode = 0644, .proc_handler = proc_dointvec, }, // ... { .procname = "ip_conntrack_log_invalid", .maxlen = sizeof(unsigned int), .mode = 0644, .proc_handler = proc_dointvec_minmax, .extra1 = &log_invalid_proto_min, .extra2 = &log_invalid_proto_max, }, …

4
Co robi ((void (*) ()) buf) (); oznaczać?
Rozwiązuję binarne wyzwanie dotyczące eksploatacji na picoCTF i natrafiłem na następujący fragment kodu: ((void (*)())buf)(); gdzie bufjest tablica znaków. Rozwiązałem wyzwanie, ale nie rozumiem, co dokładnie robi. Spojrzałem na ten wątek, ale nie mogłem go zrozumieć. Co ((void (*)())buf)();znaczy


6
(x | y) - y dlaczego nie może to być po prostu x lub nawet `x | 0`
Czytałem kod jądra i w jednym miejscu zobaczyłem wyrażenie w środku if instrukcji, takie jak if (value == (SPINLOCK_SHARED | 1) - 1) { ............ } gdzie SPINLOCK_SHARED = 0x80000000 jest predefiniowaną stałą. Zastanawiam się, dlaczego potrzebujemy (SPINLOCK_SHARED | 1) - 1 - do konwersji typu? wynikiem wyrażenia byłoby 80000000 …


2
Dlaczego adresy argc i argv 12 bajtów są oddzielone?
Na swoim komputerze uruchomiłem następujący program (64-bitowy Intel z systemem Linux). #include <stdio.h> void test(int argc, char **argv) { printf("[test] Argc Pointer: %p\n", &argc); printf("[test] Argv Pointer: %p\n", &argv); } int main(int argc, char **argv) { printf("Argc Pointer: %p\n", &argc); printf("Argv Pointer: %p\n", &argv); printf("Size of &argc: %lu\n", sizeof (&argc)); …


6
Dlaczego to twierdzenie, że ostrzeżenie o typie dereferencji jest specyficzne dla kompilatora?
Czytałem różne posty na temat Przepełnienia stosu RE: dereferujący błąd wskaźnika pisanego czcionką typu. Rozumiem, że błąd jest zasadniczo ostrzeżeniem kompilatora o niebezpieczeństwie dostępu do obiektu za pomocą wskaźnika innego typu (choć wydaje się, że istnieje wyjątek char*), co jest zrozumiałym i rozsądnym ostrzeżeniem. Moje pytanie jest specyficzne dla poniższego …
38 c  pointers  casting 


7
Dlaczego nie mogę uzyskać dostępu do wskaźnika do wskaźnika dla tablicy stosów?
Proszę spojrzeć na następujący kod. Próbuje przekazać tablicę jako char**funkcję: #include <stdio.h> #include <stdlib.h> static void printchar(char **x) { printf("Test: %c\n", (*x)[0]); } int main(int argc, char *argv[]) { char test[256]; char *test2 = malloc(256); test[0] = 'B'; test2[0] = 'A'; printchar(&test2); // works printchar((char **) &test); // crashes because …
35 c 

4
Czy algorytm strcasecmp jest wadliwy?
Próbuję ponownie wdrożyć strcasecmpfunkcję w C i zauważyłem, co wydaje się być niespójnością w procesie porównywania. Od man strcmp Funkcja strcmp () porównuje dwa ciągi s1 i s2. Ustawienia regionalne nie są brane pod uwagę (dla porównania uwzględniającego ustawienia regionalne, patrz strcoll (3)). Zwraca liczbę całkowitą mniejszą, równą lub większą …
34 c  strcmp 

7
Jak działa porównywanie wskaźników w C? Czy można porównywać wskaźniki, które nie wskazują tej samej tablicy?
W K&R (The C Programming Language 2nd Edition) rozdział 5 czytam: Po pierwsze, wskaźniki mogą być porównywane w pewnych okolicznościach. Jeśli pi qpunkt do członków tej samej tablicy, stosunki wówczas jak ==, !=, <, >=, itd pracę prawidłowo. Co wydaje się sugerować, że można porównywać tylko wskaźniki wskazujące na tę …

4
Czy wątki są kopiowane podczas wywoływania fork?
Jeśli mam program działający z wątkami i wywołujący fork()system uniksowy, czy wątki są kopiowane? Wiem, że pamięć wirtualna dla bieżącego procesu jest kopiowana 1: 1 do nowego spawnowanego procesu. Wiem, że wątki mają swój własny stos w wirtualnej pamięci procesu. Dlatego przynajmniej stos wątków powinien zostać skopiowany. Nie wiem jednak, …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.