คำถามติดแท็ก c

C เป็นภาษาโปรแกรมทั่วไปที่ใช้สำหรับการเขียนโปรแกรมระบบ (ระบบปฏิบัติการและฝังตัว), ห้องสมุด, เกมและข้ามแพลตฟอร์ม แท็กนี้ควรใช้กับคำถามทั่วไปที่เกี่ยวข้องกับภาษา C ตามที่กำหนดไว้ในมาตรฐาน ISO 9899 (เวอร์ชันล่าสุด 9899: 2018 เว้นแต่ระบุไว้เป็นอย่างอื่น - นอกจากนี้ยังติดแท็กคำขอเฉพาะรุ่นด้วย c89, c99, c11 ฯลฯ ) C แตกต่างจาก C ++ และไม่ควรใช้ร่วมกับแท็ก C ++ หากไม่มีเหตุผล

2
ชื่อ `atoi` มาจากไหน?
ในภาษา C พวกเขาคิดชื่อatoiสำหรับการแปลงสตริงเป็นจำนวนเต็มมาจากไหน? สิ่งเดียวที่ฉันคิดได้คือ Array To Integer เป็นคำย่อ แต่มันไม่สมเหตุสมผลเลย

29
'ทำ ... ในขณะที่' กับ 'ในขณะที่'
รายการที่ซ้ำกันที่เป็นไปได้: While กับ Do While เมื่อใดฉันควรใช้ do-while แทน while ลูป ฉันเขียนโปรแกรมมาระยะหนึ่งแล้ว (ทำงาน 2 ปี + ปริญญา 4.5 ปี + เตรียมอุดมศึกษา 1 ปี) และฉันไม่เคยใช้ลูป do-while ที่ไม่ถูกบังคับให้เรียนในหลักสูตร Introduction to Programming ฉันมีความรู้สึกมากขึ้นเรื่อย ๆ ว่าฉันเขียนโปรแกรมผิดถ้าฉันไม่เคยเจออะไรที่เป็นพื้นฐาน เป็นไปได้ไหมที่ฉันไม่ได้เผชิญกับสถานการณ์ที่ถูกต้อง? มีตัวอย่างอะไรบ้างที่จำเป็นต้องใช้ do-while แทน a while (การเรียนของฉันเกือบทั้งหมดเป็นภาษา C / C ++ และงานของฉันอยู่ในภาษา C # ดังนั้นหากมีภาษาอื่นที่เหมาะสมอย่างยิ่งเพราะ do-whiles ทำงานแตกต่างกันคำถามเหล่านี้ก็ใช้ไม่ได้จริงๆ) เพื่อชี้แจง ... …
86 c#  c++  c  while-loop  do-while 

3
เค้าโครงหน่วยความจำโครงสร้างใน C
ฉันมีพื้นหลัง C # ฉันเป็นมือใหม่มากสำหรับภาษาระดับต่ำเช่น C ใน C # structหน่วยความจำของคอมไพเลอร์จะจัดวางโดยค่าเริ่มต้น คอมไพเลอร์สามารถเรียงลำดับฟิลด์ข้อมูลใหม่หรือวางบิตเพิ่มเติมระหว่างฟิลด์โดยปริยาย ดังนั้นฉันต้องระบุแอตทริบิวต์พิเศษบางอย่างเพื่อแทนที่พฤติกรรมนี้สำหรับรูปแบบที่แน่นอน AFAIK, C จะไม่เรียงลำดับใหม่หรือจัดรูปแบบหน่วยความจำของ a structตามค่าเริ่มต้น อย่างไรก็ตามฉันได้ยินมาว่ามีข้อยกเว้นเล็กน้อยที่หาได้ยากมาก ลักษณะการจัดวางหน่วยความจำของ C คืออะไร? สิ่งที่ควรเรียงใหม่ / จัดตำแหน่งและไม่?

3
วิธีรับตัวชี้ FILE จาก File descriptor
ฉันกำลังเล่นอยู่mkstemp()ซึ่งให้คำอธิบายไฟล์ แต่ฉันต้องการสร้างเอาต์พุตที่จัดรูปแบบผ่านfprintf()ไฟล์. มีวิธีง่ายๆในการแปลง file descriptor ให้mkstemp()เป็นFILE *โครงสร้างที่เหมาะกับการใช้งานfprintf()หรือไม่?
86 c  posix  mkstemp 

8
เหตุใดฉันจึงได้รับความล้มเหลวในการยืนยัน C malloc
ฉันกำลังใช้การหารและพิชิตอัลกอริทึมพหุนามดังนั้นฉันจึงสามารถเปรียบเทียบกับการใช้งาน OpenCL ได้ แต่ฉันไม่สามารถmallocทำงานได้ เมื่อฉันเรียกใช้โปรแกรมมันจะจัดสรรสิ่งต่างๆมากมายตรวจสอบบางสิ่งจากนั้นส่งsize/2ไปยังอัลกอริทึม จากนั้นเมื่อฉันตีเส้นmallocอีกครั้งมันจะพ่นสิ่งนี้ออกมา: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size …
86 c  gcc  malloc  assertion 

3
การร่ายสองครั้งไปยัง int ที่ไม่ได้ลงนามบน Win32 ถูกตัดทอนเป็น 2,147,483,648
รวบรวมรหัสต่อไปนี้: double getDouble() { double value = 2147483649.0; return value; } int main() { printf("INT_MAX: %u\n", INT_MAX); printf("UINT_MAX: %u\n", UINT_MAX); printf("Double value: %f\n", getDouble()); printf("Direct cast value: %u\n", (unsigned int) getDouble()); double d = getDouble(); printf("Indirect cast value: %u\n", (unsigned int) d); return 0; } เอาต์พุต (MSVC x86): INT_MAX: 2147483647 …

3
ความแตกต่างอย่างมาก (x9) ในเวลาดำเนินการระหว่างโค้ดที่เหมือนกันเกือบทั้งหมดใน C และ C ++
ฉันพยายามแก้แบบฝึกหัดนี้จาก www.spoj.com: FCTRL - Factorial คุณไม่จำเป็นต้องอ่านจริงๆแค่ทำถ้าคุณอยากรู้ :) ก่อนอื่นฉันติดตั้งในC ++ (นี่คือวิธีแก้ปัญหาของฉัน): #include <iostream> using namespace std; int main() { unsigned int num_of_inputs; unsigned int fact_num; unsigned int num_of_trailing_zeros; std::ios_base::sync_with_stdio(false); // turn off synchronization with the C library’s stdio buffers (from https://stackoverflow.com/a/22225421/5218277) cin >> num_of_inputs; while (num_of_inputs--) { cin >> fact_num; num_of_trailing_zeros …
85 c++  c  performance  gcc  iostream 


4
dup2 / dup - ทำไมฉันต้องทำซ้ำ file descriptor?
ฉันพยายามทำความเข้าใจการใช้dup2และdup. จากหน้าคน: DESCRIPTION dup and dup2 create a copy of the file descriptor oldfd. After successful return of dup or dup2, the old and new descriptors may be used interchangeably. They share locks, file position pointers and flags; for example, if the file position is modified by using lseek on …

4
ปิดการใช้งานคำเตือน GCC เฉพาะบางส่วนของหน่วยการแปลหรือไม่
GCC ที่ใกล้เคียงที่สุดเทียบเท่ากับรหัสตัวประมวลผลล่วงหน้า MSVC นี้คืออะไร #pragma warning( push ) // Save the current warning state. #pragma warning( disable : 4723 ) // C4723: potential divide by 0 // Code which would generate warning 4723. #pragma warning( pop ) // Restore warnings to previous state. เรามีโค้ดในส่วนหัวที่รวมอยู่ทั่วไปซึ่งเราไม่ต้องการสร้างคำเตือนที่เฉพาะเจาะจง อย่างไรก็ตามเราต้องการให้ไฟล์ที่มีส่วนหัวเหล่านั้นสร้างคำเตือนนั้นต่อไป (หากโปรเจ็กต์เปิดใช้งานคำเตือนนั้น)

7
เว้นวรรคอัตโนมัติด้วย C เป็นกลุ่ม?
ฉันค่อนข้างนิสัยเสียจากการใช้ Eclipse และ java ฉันเริ่มใช้ vim เพื่อทำการเข้ารหัส C ในสภาพแวดล้อม linux มีวิธีที่จะทำให้ vim ทำการเว้นระยะห่างที่เหมาะสมสำหรับบล็อกโดยอัตโนมัติหรือไม่ ดังนั้นหลังจากพิมพ์ {บรรทัดถัดไปจะมีช่องว่าง 2 ช่องเยื้องเข้ามาและผลตอบแทนของบรรทัดนั้นจะคงไว้ที่การเยื้องเดียวกันและ a} จะเลื่อนกลับ 2 ช่องว่าง?
85 c  vim  coding-style  vi 

10
มีวิธีที่สวยงามและรวดเร็วในการทดสอบให้ 1 บิตในจำนวนเต็มอยู่ในพื้นที่ที่ติดกันหรือไม่?
ฉันต้องการทดสอบว่าตำแหน่ง (จาก 0 ถึง 31 สำหรับจำนวนเต็ม 32 บิต) ที่มีค่าบิต 1 เป็นพื้นที่ที่ต่อเนื่องกันหรือไม่ ตัวอย่างเช่น: 00111111000000000000000000000000 is contiguous 00111111000000000000000011000000 is not contiguous ฉันต้องการให้การทดสอบนี้คือฟังก์ชันบางอย่างhas_contiguous_one_bits(int)เป็นแบบพกพา วิธีหนึ่งที่ชัดเจนคือการวนซ้ำตำแหน่งเพื่อค้นหาบิตเซ็ตแรกจากนั้นบิตแรกที่ไม่ได้ตั้งค่าและตรวจสอบบิตที่กำหนดเพิ่มเติม ฉันสงสัยว่ามีวิธีที่เร็วกว่านี้หรือไม่? หากมีวิธีการที่รวดเร็วในการค้นหาบิตชุดสูงสุดและต่ำสุด (แต่จากคำถามนี้ดูเหมือนว่าไม่มีแบบพกพา) การใช้งานที่เป็นไปได้คือ bool has_contiguous_one_bits(int val) { auto h = highest_set_bit(val); auto l = lowest_set_bit(val); return val == (((1 << (h-l+1))-1)<<l); } เพื่อความสนุกสนานนี่คือ 100 จำนวนเต็มแรกที่มีบิตต่อเนื่องกัน: 0 1 2 …



8
ทำไม GDB จึงกระโดดข้ามบรรทัดอย่างไม่คาดคิดและพิมพ์ตัวแปรเป็น“ <value optimized out>”
ใครช่วยอธิบายพฤติกรรมของ gdb นี้ได้บ้าง? 900 memset(&amp;new_ckpt_info,'\0',sizeof(CKPT_INFO)); (gdb) **903 prev_offset = cp_node-&gt;offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb-&gt;shm_addr.ckpt_addr+sizeof(CKPT_** HDR),i_offset); (gdb) **903 prev_offset = cp_node-&gt;offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb-&gt;shm_addr.ckpt_addr+sizeof(CKPT_ HDR),i_offset);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.