คำถามติดแท็ก string-literals

ตัวอักษรสตริงเกี่ยวข้องกับการแสดงทางวากยสัมพันธ์ของสตริงคงที่ตามตัวอักษรใน C และ C ++

7
วิธีเพิ่มเครื่องหมายเปอร์เซ็นต์ใน NSString
ฉันต้องการมีเครื่องหมายเปอร์เซ็นต์ในสายอักขระของฉันหลังจากตัวเลข บางสิ่งเช่นนี้: 75% ฉันจะทำสิ่งนี้ได้อย่างไร ฉันเหนื่อย: [NSString stringWithFormat:@"%d\%", someDigit]; แต่มันไม่ได้ผลสำหรับฉัน

10
สตริง c ++ หลายบรรทัดตามตัวอักษร
มีวิธีใดบ้างที่จะมีข้อความธรรมดาหลายบรรทัดตัวอักษรคงที่ใน C ++ หรือไม่? อาจจะมีเคล็ดลับการแยกวิเคราะห์ด้วย#includeไฟล์หรือไม่ ฉันคิดไม่ออกเลย แต่เด็กผู้ชายนั่นคงจะดี ฉันรู้ว่ามันจะอยู่ใน C ++ 0x



8
สตริงตัวอักษร: พวกเขาจะไปที่ไหน
ฉันสนใจที่ตัวอักษรสตริงได้รับการจัดสรร / จัดเก็บ ฉันพบคำตอบที่น่าสนใจที่นี่โดยพูดว่า: การกำหนดสตริงแบบอินไลน์ฝังข้อมูลลงในโปรแกรมของตัวเองและไม่สามารถเปลี่ยนแปลงได้ (คอมไพเลอร์บางตัวยอมให้สิ่งนี้ทำได้โดยใช้เล่ห์เหลี่ยมไม่ต้องกังวล) แต่มันเกี่ยวข้องกับ C ++ ไม่ต้องพูดถึงว่ามันไม่รบกวน ฉันกำลังยุ่ง = D ดังนั้นคำถามของฉันอยู่ที่ไหนสตริงตัวอักษรของฉันจะถูกเก็บไว้อย่างไร? ทำไมฉันไม่ลองเปลี่ยนมันล่ะ? การใช้งานแตกต่างกันไปตามแพลตฟอร์มหรือไม่ ไม่มีใครสนใจที่จะอธิบายรายละเอียดเกี่ยวกับ "เคล็ดลับสมาร์ท?"

5
เส้นทาง Windows ใน Python
วิธีที่ดีที่สุดในการแสดงไดเรกทอรี Windows "C:\meshes\as"คืออะไร ฉันพยายามปรับเปลี่ยนสคริปต์ แต่มันไม่ทำงานเพราะฉันดูเหมือนจะไม่ได้รับไดเรกทอรีที่ถูกต้องฉันคิดว่าเป็นเพราะ'\'ตัวละครที่หลบหนี?

6
ความยาวการคำนวณของสตริง C ในเวลาคอมไพล์ นี่คือ constexpr จริงๆหรือ?
ฉันกำลังพยายามคำนวณความยาวของสตริงลิเทอรัลในเวลาคอมไพล์ ในการทำเช่นนั้นฉันใช้รหัสต่อไปนี้: #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); } ทุกอย่างทำงานตามที่คาดไว้โปรแกรมจะพิมพ์ 4 และ 8 รหัสแอสเซมบลีที่สร้างขึ้นโดยเสียงดังแสดงว่าผลลัพธ์ถูกคำนวณในเวลาคอมไพล์: 0x100000f5e: leaq 0x35(%rip), %rdi ; "%d %d" 0x100000f65: movl $0x4, %esi 0x100000f6a: movl $0x8, %edx 0x100000f6f: …

4
เหตุใด (เฉพาะ) คอมไพเลอร์บางตัวจึงใช้แอดเดรสเดียวกันสำหรับตัวอักษรสตริงที่เหมือนกัน
https://godbolt.org/z/cyBiWY ฉันเห็น'some'ตัวอักษรสองตัวในโค้ดแอสเซมเบลอร์ที่สร้างโดย MSVC แต่มีเพียงตัวเดียวที่มี clang และ gcc สิ่งนี้นำไปสู่ผลลัพธ์ของการเรียกใช้โค้ดที่แตกต่างกันโดยสิ้นเชิง static const char *A = "some"; static const char *B = "some"; void f() { if (A == B) { throw "Hello, string merging!"; } } ใครสามารถอธิบายความแตกต่างและความคล้ายคลึงกันระหว่างผลลัพธ์การคอมไพล์เหล่านั้นได้บ้าง เหตุใด clang / gcc จึงเพิ่มประสิทธิภาพบางอย่างแม้ว่าจะไม่มีการร้องขอการปรับให้เหมาะสมก็ตาม นี่เป็นพฤติกรรมที่ไม่ได้กำหนดหรือไม่? ฉันยังสังเกตเห็นว่าถ้าฉันเปลี่ยนการประกาศเป็นที่แสดงด้านล่าง clang / gcc / msvc จะไม่ทิ้ง"some"รหัสแอสเซมเบลอร์เลย ทำไมพฤติกรรมถึงแตกต่างกัน? static …

4
จะใช้อาร์กิวเมนต์มาโครเป็นสตริงลิเทอรัลได้อย่างไร
ฉันกำลังพยายามหาวิธีเขียนมาโครที่จะส่งทั้งการแทนค่าตัวอักษรสตริงของชื่อตัวแปรพร้อมกับตัวแปรในฟังก์ชัน ตัวอย่างเช่นให้ฟังก์ชันต่อไปนี้ void do_something(string name, int val) { cout << name << ": " << val << endl; } ฉันต้องการเขียนมาโครดังนั้นฉันจึงสามารถทำได้: int my_val = 5; CALL_DO_SOMETHING(my_val); ซึ่งจะพิมพ์ออกมา: my_val: 5 ฉันลองทำสิ่งต่อไปนี้: #define CALL_DO_SOMETHING(VAR) do_something("VAR", VAR); อย่างไรก็ตามอย่างที่คุณอาจเดาได้ว่า VAR ภายในเครื่องหมายคำพูดจะไม่ถูกแทนที่ แต่จะถูกส่งผ่านเป็นเพียงสตริง "VAR" ดังนั้นฉันต้องการทราบว่ามีวิธีที่จะทำให้อาร์กิวเมนต์มาโครกลายเป็นสตริงลิเทอรัลได้หรือไม่

1
การเข้ารหัส Unicode สำหรับตัวอักษรสตริงใน C ++ 11
จากคำถามที่เกี่ยวข้องฉันต้องการถามเกี่ยวกับอักขระใหม่และประเภทลิเทอรัลสตริงใน C ++ 11 ดูเหมือนว่าตอนนี้เรามีอักขระสี่ประเภทและตัวอักษรสตริงห้าประเภท ประเภทอักขระ: char a = '\x30'; // character, no semantics wchar_t b = L'\xFFEF'; // wide character, no semantics char16_t c = u'\u00F6'; // 16-bit, assumed UTF16? char32_t d = U'\U0010FFFF'; // 32-bit, assumed UCS-4 และตัวอักษรสตริง: char A[] = "Hello\x0A"; // byte string, "narrow encoding" wchar_t …

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