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

17
ทำไมฉันถึงได้รับข้อผิดพลาดในการแบ่งส่วนเมื่อเขียนถึง“ char * s” ที่เริ่มต้นด้วยตัวอักษรสตริง แต่ไม่ใช่“ char s []”
รหัสต่อไปนี้ได้รับ seg ข้อผิดพลาดในบรรทัด 2: char *str = "string"; str[0] = 'z'; // could be also written as *str = 'z' printf("%s\n", str); ขณะนี้ใช้งานได้ดีอย่างสมบูรณ์: char str[] = "string"; str[0] = 'z'; printf("%s\n", str); ทดสอบกับ MSVC และ GCC

9
'\ 0' และ printf () ใน C
ในหลักสูตรเบื้องต้นของ C ฉันได้เรียนรู้ว่าในขณะที่การจัดเก็บสตริงจะถูกเก็บไว้ด้วยตัวละคร null \0เมื่อสิ้นสุดมัน แต่ถ้าฉันต้องการที่จะพิมพ์สตริงพูดprintf("hello")แม้ว่าฉันจะพบว่ามันไม่ได้จบลงด้วย\0คำสั่งต่อไปนี้ printf("%d", printf("hello")); Output: 5 แต่นี่ดูเหมือนจะไม่สอดคล้องกันเท่าที่ฉันรู้ว่าตัวแปรเช่นสายอักขระถูกเก็บไว้ในหน่วยความจำหลักและฉันเดาว่าในขณะที่พิมพ์บางอย่างมันอาจถูกเก็บไว้ในหน่วยความจำหลักแล้วทำไมจึงแตกต่างกัน
21 c  printf  stdout  c-strings 

4
ทำไม const char * ไม่ต้องการตัวชี้ไปยังที่อยู่หน่วยความจำ
นี่อาจเป็นคำถามง่าย ๆ แต่ทำไม const char * ไม่จำเป็นต้องระบุที่อยู่หน่วยความจำ ตัวอย่าง: const char* a = "Anthony"; และไม่: const char *a = // Address to const char เหมือนประเภทอื่น ๆ

4
อักขระอาร์เรย์ควรใช้เป็นสตริงอย่างไร
ฉันเข้าใจว่าสตริงใน C เป็นเพียงอาร์เรย์อักขระ ดังนั้นฉันลองรหัสต่อไปนี้ แต่ให้ผลลัพธ์ที่แปลกประหลาดเช่นผลลัพธ์ขยะหรือโปรแกรมขัดข้อง: #include <stdio.h> int main (void) { char str [5] = "hello"; puts(str); } ทำไมมันไม่ทำงาน gcc -std=c17 -pedantic-errors -Wall -Wextraมันรวบรวมหมดจดด้วย หมายเหตุ:โพสต์นี้มีวัตถุประสงค์เพื่อใช้เป็นคำถามที่พบบ่อยซึ่งเป็นที่ยอมรับสำหรับปัญหาที่เกิดจากความล้มเหลวในการจัดสรรห้องสำหรับเทอร์มินัล NUL เมื่อประกาศสตริง

1
การเปรียบเทียบ std :: string และสตริงตัวอักษรสไตล์ C
สมมติว่าฉันมีรหัสต่อไปนี้: #include <iostream> #include <string> #include <iomanip> using namespace std; // or std:: int main() { string s1{ "Apple" }; cout << boolalpha; cout << (s1 == "Apple") << endl; //true } คำถามของฉันคือ: ระบบตรวจสอบระหว่างสองสิ่งนี้อย่างไร s1เป็นวัตถุในขณะที่"Apple"เป็นตัวอักษรสตริงสไตล์ C เท่าที่ฉันรู้ชนิดข้อมูลที่แตกต่างไม่สามารถเปรียบเทียบได้ ฉันหายไปนี่อะไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.