Pertanyaan yang diberi tag «c»

C adalah bahasa pemrograman tujuan umum yang digunakan untuk pemrograman sistem (OS dan tertanam), perpustakaan, game, dan lintas-platform. Tag ini harus digunakan dengan pertanyaan umum tentang bahasa C, sebagaimana didefinisikan dalam standar ISO 9899 (versi terbaru, 9899: 2018, kecuali ditentukan lain - juga tag permintaan versi khusus dengan c89, c99, c11, dll). C berbeda dari C ++ dan tidak boleh digabungkan dengan tag C ++ tanpa alasan yang rasional.



4
Apa perlunya kawat gigi kosong '{}' di akhir array struct?
Saya menekan beberapa kode c di kernel Linux: 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
Apa yang ((void (*) ()) buf) (); berarti?
Saya memecahkan tantangan eksploitasi biner di picoCTF dan menemukan potongan kode ini: ((void (*)())buf)(); dimana buf array karakter. Saya memecahkan tantangan tetapi tampaknya tidak mengerti apa yang sebenarnya ia lakukan. Saya melihat ini utas tetapi saya tidak bisa keluar. Apa ((void (*)())buf)();artinya


6
(x | y) - y mengapa tidak bisa hanya x atau bahkan `x | 0`
Saya membaca kode kernel, dan di satu tempat saya melihat ekspresi di dalam ifpernyataan seperti if (value == (SPINLOCK_SHARED | 1) - 1) { ............ } di mana SPINLOCK_SHARED = 0x80000000konstanta yang ditentukan sebelumnya. Saya heran mengapa kita perlu (SPINLOCK_SHARED | 1) - 1- untuk tujuan konversi tipe? hasil dari …


2
Mengapa alamat argc dan argv 12 byte terpisah?
Saya menjalankan program berikut di komputer saya (Intel 64-bit menjalankan 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
Mengapa ini menyatakan kompiler khusus peringatan jenis pointer dihukum?
Saya telah membaca berbagai posting di Stack Overflow RE: kesalahan pointer-jenis dihukum-derefercing. Pemahaman saya adalah bahwa kesalahan pada dasarnya adalah peringatan kompiler dari bahaya mengakses suatu objek melalui pointer dari tipe yang berbeda (meskipun pengecualian tampaknya dibuat untuk char*), yang merupakan peringatan yang dapat dimengerti dan masuk akal. Pertanyaan saya …
38 c  pointers  casting 


7
Mengapa saya tidak bisa mengakses pointer ke pointer untuk array stack?
Silakan lihat kode berikut. Mencoba untuk melewatkan array sebagai char**ke fungsi: #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 …
35 c 

4
Apakah algoritma strcasecmp cacat?
Saya mencoba menerapkan kembali strcasecmp fungsi dalam C dan saya perhatikan apa yang tampak sebagai inkonsistensi dalam proses perbandingan. Dari man strcmp Fungsi strcmp () membandingkan dua string s1 dan s2. Lokal tidak diperhitungkan (untuk perbandingan sadar-lokal, lihat strcoll (3)). Ini mengembalikan bilangan bulat kurang dari, sama dengan, atau lebih …
34 c  strcmp 

7
Bagaimana perbandingan pembanding bekerja di C? Apakah boleh membandingkan pointer yang tidak menunjuk ke array yang sama?
Dalam K&R (The C Programming Language 2nd Edition) bab 5 saya membaca yang berikut: Pertama, pointer dapat dibandingkan dalam kondisi tertentu. Jika pdan qarahkan ke anggota array yang sama, hubungan itu seperti ==, !=, <, >=, dll bekerja dengan baik. Yang tampaknya menyiratkan bahwa hanya pointer yang menunjuk ke array …

4
Apakah utas disalin saat memanggil garpu?
Jika saya memiliki program yang berjalan dengan utas dan memanggil fork()sistem berbasis unix, apakah utas disalin? Saya tahu bahwa memori virtual untuk proses saat ini disalin 1: 1 ke proses baru yang dihasilkan. Saya tahu bahwa utas memiliki tumpukan mereka sendiri dalam memori virtual suatu proses. Jadi, setidaknya tumpukan utas …

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.