Thursday 6 July 2017

ลินุกซ์ printf รูปแบบ ไบนารี ตัวเลือก


printf command. Stranger นี่เป็นหัวข้อใหญ่ ๆ ที่ต้องการประสบการณ์ - โปรดกรอกข้อมูลที่ขาดหายไปขยายคำอธิบายและแก้ไขรายละเอียดถ้าสามารถทำได้ความสนใจนี่คือคำสั่ง printf ของ Bash-builtin แต่คำอธิบายควร เป็นเกือบเหมือนกันสำหรับคำสั่งภายนอกที่เป็นไปตาม POSIX. GNU Awk คาดว่าจะเป็นเครื่องหมายจุลภาคหลังจากสตริงรูปแบบและระหว่างแต่ละอาร์กิวเมนต์ของคำสั่ง printf ตัวอย่างเช่นดูตัวอย่างรหัสฉันไม่ต้องการเปลี่ยนเส้นทางให้คุณไปที่ คู่มือสำหรับตระกูล printf C อย่างไรก็ตามถ้าคุณมีประสบการณ์มากขึ้นควรเป็นคำอธิบายโดยละเอียดที่สุดสำหรับสตริงรูปแบบและตัวปรับแต่งเนื่องจากการใช้งานประวัติย้อนหลังที่ขัดแย้งกันของคำสั่ง echo POSIX แนะนำให้ printf เป็นที่ต้องการมากกว่า echo คำสั่ง printf มีวิธีในการพิมพ์ข้อความที่จัดรูปแบบไว้ล่วงหน้าซึ่งคล้ายคลึงกับ printf interface ระบบ C function มันหมายถึงการสืบทอด echo และมีคุณสมบัติและความเป็นไปได้มากขึ้น eside เหตุผลอื่น ๆ POSIX มีอาร์กิวเมนต์ที่ดีมากที่จะแนะนำให้ทั้งสองรสชาติที่สำคัญทางประวัติศาสตร์ของคำสั่ง echo จะร่วมกันพวกเขาชนกันคำสั่งใหม่จะต้องมีการคิดค้นเพื่อแก้ปัญหารูปแบบข้อความจะได้รับในรูปแบบในขณะที่ข้อโต้แย้งทั้งหมด formstring อาจชี้ไปที่จะได้รับหลังจากนั้นที่นี่ที่ระบุโดย ARGUMENTS ดังนั้น printf ทั่วไปดูเหมือนดูเหมือนว่านามสกุล s nName sn เป็นข้อกำหนดรูปแบบและตัวแปรทั้งสองจะถูกส่งผ่านเป็นอาร์กิวเมนต์ s ในรูปแบบสตริงชี้ไปที่ สำหรับทุก specifier รูปแบบที่คุณให้ printf รออาร์กิวเมนต์หนึ่งถ้าได้รับเอาท์พุทจะถูกกำหนดให้ตัวแปร VAR แทนการพิมพ์ไปยัง stdout เทียบกับ sprintf ในบางวิธีตัวเลือก - v สามารถ t กำหนดโดยตรงไปยังดัชนีอาเรย์ในรุ่นทุบตีเก่า มากกว่า Bash 4 1. ในเวอร์ชันที่ใหม่กว่า 4 1 ต้องระมัดระวังเมื่อทำการขยายไปสู่อาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกแรกของ printf เนื่องจากจะเปิดช่องโหว่เกี่ยวกับการแทรกโค้ดได้ง่ายซึ่งสามารถสะท้อนได้ แน่นอนจะถูกแทนที่ด้วยคำสั่งใด ๆ โดยพลการถ้าคุณต้องต้องระบุสตริงรูปแบบฮาร์ดโค้ดหรือใช้ - เพื่อส่งสัญญาณถึงจุดสิ้นสุดของตัวเลือกปัญหาเดียวกันนี้ใช้กับการอ่านและแบบเดียวกันกับ mapfile แม้ว่าจะมีการขยายการโต้แย้งของพวกเขา เป็นธรรมดาน้อยกว่าแน่นอนในความหมายเชลล์อาร์กิวเมนต์เป็นเพียงสตริงอย่างไรก็ตาม C-notations ทั่วไปและการเพิ่มจำนวนสำหรับค่าคงที่เป็นที่รู้จักเพื่อให้อาร์กิวเมนต์เป็นจำนวนมากสำหรับ printf ในตัว glibc โดยปกติ isn ta binary conversion specifier เป็นไปได้ที่จะเพิ่มประเภทการแปลงที่กำหนดเองลงในตระกูล printf ของฟังก์ชันใน glibc ดูรายละเอียดของ registerprintffunction คุณสามารถเพิ่มการแปลง b ที่กำหนดเองเพื่อการใช้งานของคุณเองได้หากช่วยให้โค้ดแอ็พพลิเคชันสามารถใช้งานได้ง่ายขึ้นนี่เป็นตัวอย่างของวิธีการ เพื่อใช้รูปแบบ printf ที่กำหนดเองใน glibc นอกจากนี้สิ่งที่คุณกำลังพูดถึงเกี่ยวกับ wrt การจัดการผลลัพธ์หลายอย่างต่อเนื่องไม่ใช่ reentrancy per se แต่เพียง fallout ของการใช้สิ่งที่จำนวนไป glob วัตถุที่จะเก็บผลลัพธ์ในฟังก์ชันไม่ได้ถูกป้อนใหม่ใน C สำนวนสำนวนที่เหมาะสมหรืออย่างน้อยที่ใช้กันอย่างแพร่หลายในการจัดการกับฟังก์ชันที่เก็บผลลัพธ์ไว้ในวัตถุระดับโลกคือการคัดลอกผลลัพธ์เหล่านั้นทันทีเมื่อได้รับข้อมูลเหล่านี้ ข้อได้เปรียบที่สำคัญที่ถ้าเพียงหนึ่งผลจะต้องในเวลานั้นไม่มีการจัดสรรเพิ่มเติมเป็นสิ่งที่จำเป็น Greg เกรียน 27 พฤศจิกายน 12 ที่ 0 51.Here เราจะต้องไม่เห็นด้วยฉันไม่สามารถมองเห็นวิธีการเพิ่มอีกหนึ่งสัญลักษณ์ preprocessor ไม่สร้างความรำคาญมาทุกที่ใกล้ ความเป็นอันตรายของการ จำกัด กรณีการใช้งานอย่างรุนแรงทำให้เกิดข้อผิดพลาดของอินเตอร์เฟซที่สำรองไว้ชั่วคราวเพื่อจัดเก็บข้อมูลในช่วงเวลาของโปรแกรมสำหรับค่าชั่วคราวและสร้างรหัสแย่ลงบนแพลตฟอร์มที่ทันสมัยที่สุด R 27 พ. ย. 55 ที่ 1 53. ตระกูล printf คือ สามารถพิมพ์ได้เฉพาะในฐาน 8, 10 และ 16 โดยใช้ specifiers มาตรฐานโดยตรงแนะนำให้สร้างฟังก์ชันที่แปลงจำนวนเป็นสตริงต่อความต้องการเฉพาะของแต่ละคำตอบสำหรับคำตอบอื่น ๆ ทั้งหมดจะมีอย่างน้อยหนึ่งคำ imitations. Use หน่วยความจำแบบคงที่สำหรับบัฟเฟอร์การคืนค่านี้ จำกัด จำนวนครั้งที่ฟังก์ชันอาจถูกใช้เป็นอาร์กิวเมนต์ printf. Allocate หน่วยความจำที่ต้องใช้รหัสเรียกไปยังฟรี pointers. Require รหัสโทรเพื่อให้ชัดเจน buffer. Call printf โดยตรง นี้บังคับฟังก์ชันใหม่สำหรับการ fprintf sprintf vsprintf ฯลฯ ใช้ช่วงที่ลดลงของ integers. The ต่อไปนี้ไม่มีข้อ จำกัด ข้างต้นมันต้อง C99 หรือสูงกว่าและการใช้ s ใช้ตัวอักษรผสมเพื่อให้พื้นที่กันชนไม่มี ปัญหาเกี่ยวกับการโทรหลายสายใน printf. Linux Printf Format ตัวเลือกไบนารีมีบางเครื่องมืออื่น ๆ ที่สามารถทำบางส่วนอนุสัญญานี้เขาเป็นผู้สนับสนุน Linux Open source ผู้ที่เชื่อมั่นในการทำงานอย่างหนักลงไปที่คนโลกชอบที่จะแบ่งปันความรู้กับคนอื่น ๆ รักสุนัขชอบถ่ายภาพ Linux Printf รูปแบบตัวเลือกไบนารีเพื่อรับเงินของนักเรียน 12 มิถุนายน 2014 ดังนั้นคำถามของฉันคือ - สิ่งที่ฉันมีทางเลือกในคำสั่ง Linux นี่คือคำแนะนำของฉันใช้ Pe rl ใช้ตัวระบุการจัดรูปแบบสำหรับ printf obase 2 d obase 8 d obase 16 d obase 2 d 64 128 a a bc เขาทำงานเป็นวิศวกร Devops กับ Taggle ระบบ IOT อัตโนมัติวัดน้ำ บริษัท ซิดนีย์บางครั้งเมื่อทำงานเป็นผู้ดูแลระบบคุณ จำเป็นต้องมีการแปลงระบบหมายเลขอื่นให้แก่ผู้อื่นตามที่กำหนดไว้ข้างต้นเราสามารถแปลงระบบหมายเลขใด ๆ ให้กับระบบตัวเลขใดก็ได้ bc จะแปลงจากฐานใด ๆ ไปเป็นฐานอื่น ๆ มีตัวแปรพิเศษอีกตัวหนึ่งสำหรับคำสั่ง bc ที่เรียกว่า ibase ซึ่งกำหนดค่าพื้นฐานอินพุตใน ตัวอย่างเช่นเราไม่ได้พูดถึง ibase ดังนั้นโดยดีฟอลต์จะใช้ค่าที่ป้อนเข้าเป็นค่าทศนิยมรูปแบบของลินุกซ์ Printf ตัวเลือกไบนารีตัวเลือกไบนารีโบวเทอร์กับ Mt4 เมื่อเขียนสคริปต์ทุบตีส่วนใหญ่ของเราโดยค่าเริ่มต้นใช้คำสั่ง echo เป็นวิธีการพิมพ์ printf ในรูปแบบ prinft สามารถ มี specifiers รูปแบบลำดับหนีหรือ Unix และ Linux คำสั่ง printf ช่วยตัวอย่างและข้อมูล printf แทรกอาร์กิวเมนต์ในสตริงที่ผู้ใช้กำหนดข้อความสร้างรูปแบบเอาท์พุทมีสาม escaped character sequence เกิดขึ้นสองครั้งและเกิดขึ้นหนึ่ง n มิถุนายน 12, 2014 ดังนั้นคำถามของฉันคือ - สิ่งที่ฉันมีทางเลือกในคำสั่ง Linux นี่คือคำแนะนำของฉันใช้ Perl ใช้ specifiers จัดรูปแบบสำหรับ printf obase 2 d obase 8 d obase 16 d obase 2 d 64 128 A a bc สามารถแปลง hex เป็นตัวอย่างทศนิยม Mr Surendra Anne จาก Vijayawada, Andhra Pradesh, India คุณสามารถติดต่อเขาได้ที่ surendra linuxnix dot com รูปแบบของ Linux Printf ตัวเลือกไบนารีลำดับแปลเป็นอักษรคู่ จะหนีด้วยเครื่องหมายแบ็กสแลชดังนั้น printf จึงจะถือว่าเป็นตัวอักษรและไม่เป็นจุดสิ้นสุดของ FORMAT Empire Binary Option Expert Advisor เมื่อเขียนสคริปต์ทุบตีเราส่วนใหญ่ใช้คำสั่ง echo เป็นวิธีพิมพ์ printf In รูปแบบ prinft สามารถมี specifiers รูปแบบลำดับหนีหรือรากของมันอยู่ในภาษาการเขียนโปรแกรม C ซึ่งใช้ฟังก์ชันตามชื่อเดียวกันตัวเลือก Trading Mentor มิถุนายน 12, 2014 ดังนั้นคำถามของฉันคือ - สิ่งที่ทางเลือกทำ ฉันมีคำสั่ง Linux นี่คือคำแนะนำของฉันใช้ Perl ใช้ specifiers จัดรูปแบบของมันสำหรับ printf obase 2 d obase 8 d obase 16 d obase 2 d 64 128 a bc เป็นวิธีที่มีประโยชน์ในการผลิตผลลัพธ์ที่จัดรูปแบบได้อย่างแม่นยำจากตัวเลขหรือ อาร์กิวเมนต์แบบเดิมมีการแปลงข้อมูลจำเพาะของ s ซึ่งตีความอาร์กิวเมนต์ John เป็นสตริงและแทรกลงในเอาท์พุทในโพสต์นี้เราจะเห็นวิธีการแปลงระบบตัวเลขที่แตกต่างกันไป obase อื่น ๆ เป็นตัวแปรพิเศษในคำสั่ง bc ที่กำหนดเอาท์พุท ค่าพื้นฐานสำหรับตัวเลขที่ระบุในตัวอย่างของเราเราไม่ได้พูดถึง ibase ดังนั้นโดยดีฟอลต์จะใช้ค่าอินพุตของฉันเป็นค่าทศนิยมรูปแบบของลินุกซ์ Printf รูปแบบไบนารีตัวเลือกผลกระทบ Du Secteur ยานยนต์ซูร์เลอมีนาคม Boursier De Guyane Franaise เราจึงให้อาหาร 2 และเลขฐานสิบ 23 ถึง bc คำสั่งเพื่อแปลงทศนิยม 23 ในเป็นเลขฐานสองรูปแบบของลินุกซ์ Printf ตัวเลือกไบนารีเกี่ยวกับ printf printf ไวยากรณ์ printf ตัวอย่างคำสั่งที่เกี่ยวข้อง Linux และ Unix พิมพ์หน้าหลัก printf แทรกอาร์กิวเมนต์เป็นเรา เอ้อกำหนดสายอักขระของข้อความการจัดรูปแบบเอาท์พุท 23 พฤศจิกายน 2010 นอกจากนี้คุณยังสามารถใช้ printf เชลล์ builtin รวมทั้ง usr bin printf มัน ibase 16 เพื่อเปลี่ยนรูปแบบอินพุตเป็น hex คุณสามารถใช้คำสั่งต่อไปนี้เพื่อแปลงจากใด ๆ ฐานสำหรับไบนารีตัวอย่างเพื่อ dec และ dec เพื่อ binary รากของมันอยู่ในภาษาการเขียนโปรแกรม C ซึ่งใช้ฟังก์ชันตามชื่อเดียวกันนี้เป็นคำแนะนำเล็ก ๆ เกี่ยวกับวิธีการแปลงฐานที่แตกต่างกันไปฐานอื่น ๆ รูปแบบ Linux Printf ตัวเลือกไบนารี n คือ ลำดับสำหรับตัวอักษรใหม่และบอก printf เพื่อเริ่มต้นบรรทัดใหม่และดำเนินการต่อผลลัพธ์จาก Option Strategies Collar System 90 printf จะพิมพ์สตริงที่จัดรูปแบบไปเป็น Standard output Stock Market Index ของ French Guiana พลังของ printf อยู่ในข้อเท็จจริงที่ว่าสำหรับ สตริง FORMAT ใด ๆ ที่กำหนดอาร์กิวเมนต์สามารถเปลี่ยนแปลงได้เพื่อส่งผลกระทบต่อ output. Bash printf syntax basics. การเขียนสคริปต์ของผู้ใช้ขั้นสูง 22 มีนาคม 2013. เมื่อเขียนสคริปต์ทุบตีส่วนใหญ่ของเราโดยค่าเริ่มต้นใช้คำสั่ง echo เป็นวิธี t o print to echo output แบบมาตรฐานใช้งานง่ายและส่วนใหญ่เหมาะกับความต้องการของเราโดยไม่มีปัญหาใด ๆ แต่ด้วยความเรียบง่ายข้อ จำกัด ของข้อ จำกัด นี้มักเป็นข้อผิดพลาดในกรณีนี้ด้วยเช่นกันกับคำสั่ง echo การฟอร์แมตการออกคำสั่ง echo อาจเป็นฝันร้ายและเป็นไปไม่ได้ การแก้ปัญหานี้อาจเป็นเพื่อนเก่าที่ดีของ CC ทั้งหมด printf printf printf สามารถใช้งานได้ง่ายในสคริปต์ bash คือใช้กับโปรแกรม CC บทความนี้อธิบายถึงพื้นฐานบางส่วนของ printf พร้อมกับ examples. printf ในทางปฏิบัติ ยอมรับรูปแบบสตริงและอาร์กิวเมนต์ในรูปแบบทั่วไปต่อไปนี้ในรูปแบบ prinft สามารถมี specifiers รูปแบบลำดับหนีหรืออักขระธรรมดาเมื่อพูดถึงอาร์กิวเมนต์เป็นข้อความที่เราต้องการพิมพ์เป็นกระแสมาตรฐานเอาท์พุท Let s เริ่มต้นด้วยสิ่งที่ง่ายจาก บรรทัดคำสั่งเปลือก bash ณ จุดนี้เราได้จัดและอาร์กิวเมนต์ hello ไม่พฤติกรรมที่แตกต่างกันเมื่อเทียบกับคำสั่ง echo ไม่มีบรรทัดใหม่ได้รับการพิมพ์ออกมาตามที่ใน cas e เมื่อใช้การตั้งค่าเริ่มต้นของคำสั่ง echo เมื่อต้องการพิมพ์บรรทัดใหม่เราต้องจัดหา printf กับสตริงรูปแบบที่มีลำดับหนี n บรรทัดใหม่สายรูปแบบจะใช้กับแต่ละ argument. Format specifiers. As คุณสามารถเห็นได้ในตัวอย่างง่ายๆก่อนหน้า เราใช้ s เป็นตัวระบุรูปแบบตัวระบุ printf ที่ใช้บ่อยที่สุด ได้แก่ s, b, d, x และ f Specifiers จะถูกแทนที่ด้วยอาร์กิวเมนต์ที่สอดคล้องกันดูตัวอย่างต่อไปนี้ในตัวอย่างข้างต้นเราได้ระบุสอง specifiers s เพื่อพิมพ์ TAB t และ NEWLINE n จะใช้เป็นส่วนหนึ่งของสตริงรูปแบบ printf เพื่อพิมพ์พร้อมกับอาร์กิวเมนต์แต่ละตัว First t ใช้กับอาร์กิวเมนต์ 1 และ n ถูกนำไปใช้กับอาร์กิวเมนต์ 2 3 ถ้ามีอาร์กิวเมนต์มากกว่า specifiers สตริงรูปแบบจะถูกนำมาใช้ใหม่จนกว่าอาร์กิวเมนต์ทั้งหมดจะมีอยู่ ถูกหมดลง Specifier s หมายถึงการพิมพ์อาร์กิวเมนต์ทั้งหมดในรูปแบบ literal ขณะที่เราได้ครอบคลุมตอนนี้พื้นฐานมากให้ s ดูตัวอย่าง printf เพิ่มเติมบางแทน s specifiers เราสามารถใช้ specifier b ซึ่งเป็นหลักเดียวกันโดยจะช่วยให้ u s ในการตีความลำดับหนีกับอาร์กิวเมนต์เมื่อมาถึงการพิมพ์จำนวนเต็มเราสามารถใช้ d specifier ที่คุณสามารถดู d specifiers ปฏิเสธที่จะพิมพ์อะไรมากกว่าจำนวนเต็มเพื่อ printf หมายเลขจุดลอยตัว af specifier เป็นเพื่อนของเราพฤติกรรมเริ่มต้นของ f printf specifier คือการพิมพ์ตัวเลขทศนิยมโดยมีทศนิยม 6 ตำแหน่งเพื่อ จำกัด ตำแหน่งทศนิยมให้เป็น 1 เราสามารถระบุความแม่นยำได้ในลักษณะดังต่อไปนี้การจัดรูปแบบเป็นสามตำแหน่งด้วยก่อนหน้านี้ด้วยตาราง 0.Simple ชื่อรูปแบบเป็น 7 ตำแหน่งและสูงสุด 7 ตัวอักษรและ รูปแบบตัวเลขลอยตัวถึง 9 ตำแหน่งด้วย 2 เดซิเมตรสคริปต์ตัวอย่างที่ซับซ้อนมากขึ้นโดยใช้การจัดรูปแบบ printf เพื่อสร้างตารางที่มีหลายรายการบันทึกเป็นสคริปต์ให้ปฏิบัติการและเรียกใช้ ทีมงานมุ่งมั่นที่จะให้คำแนะนำเคล็ดลับเทคนิคและคู่มือการเขียนโปรแกรมต่างๆรวมทั้งคำแนะนำในการจัดการระบบ GNU Linux โดยทั่วไปเพื่อช่วยให้คุณสามารถเรียนรู้ Linux ได้เร็วขึ้นและใช้งานได้อย่างง่ายดายความคิดเห็นข้อเสนอแนะเชิงสร้างสรรค์หรือ การมีส่วนร่วมของคุณคือ welcome. web at linuxconfig dot org. Write สำหรับ Us. LinuxConfig กำลังมองหานักเขียนด้านเทคนิคมุ่งสู่เทคโนโลยี GNU Linux และ FLOSS บทความของคุณจะประกอบไปด้วยบทแนะนำการกำหนดค่าต่างๆของ GNU Linux และเทคโนโลยี FLOSS ที่ใช้ร่วมกับระบบปฏิบัติการ GNU Linux เมื่อเขียนบทความของคุณคุณจะคาดว่าจะสามารถให้ทันกับความก้าวหน้าทางเทคโนโลยีเกี่ยวกับพื้นที่ทางเทคนิคดังกล่าวข้างต้นของความเชี่ยวชาญคุณจะทำงานเป็นอิสระและสามารถผลิตได้อย่างน้อย 2 บทความทางเทคนิคเดือน Tutorials Linux Linux Configs. printf - ลินุกซ์คน page. int printf const char รูปแบบ int fprintf กระแสข้อมูล, รูปแบบ const char int sprintf char str, const char f int int snprintf char str, ขนาด sizet, const char format. int vprintf รูปแบบ char const, valist ap int vfprintf กระแสข้อมูลรูปแบบ const char, valist ap int vsprintf char str, รูปแบบ const char, valist ap int vsnprintf char str, ขนาด sizet , รูปแบบ const char, valist ap. Feature Test Macro ความต้องการสำหรับ glibc ดู featuretestmacros 7 snprintf, vsnprintf BSDSOURCE XOPENSOURCE 500 ISOC99SOURCE POSIXCSOURCE 200112L หรือ cc-std c99 ฟังก์ชันในตระกูล printf ผลิตเอาท์พุทตามรูปแบบตามที่อธิบายด้านล่างฟังก์ชัน printf และ vprintf เขียนออกไป stdout output output มาตรฐาน fprintf และ vfprintf เขียนออกไปยังกระแส output ที่กำหนด sprintf, snprintf, vsprintf และ vsnprintf เขียนไปยัง str สตริงตัวอักษรฟังก์ชัน snprintf และ vsnprintf เขียนที่ไบต์ขนาดใหญ่ที่สุดรวมทั้ง byte สิ้นสุด 0 เพื่อ str. The หน้าที่ vprintf, vfprintf, vsprintf, vsnprintf จะเทียบเท่ากับฟังก์ชั่น printf, fprintf, sprintf, snprintf, res pectively ยกเว้นว่าพวกเขาจะเรียกว่ามี valist แทนอาร์กิวเมนต์จำนวนตัวแปรของฟังก์ชันเหล่านี้ไม่ได้เรียกแมโคร vaiv เนื่องจากพวกเขาเรียกแมโคร vaarg ค่าของ ap จะไม่ได้กำหนดหลังจากที่โทรดู stdarg 3. เหล่านี้แปดฟังก์ชันเขียน output ภายใต้การควบคุมของสตริงรูปแบบที่ระบุวิธีอาร์กิวเมนต์หรืออาร์กิวเมนต์ตามมาที่เข้าถึงได้ผ่านทางอาร์กิวเมนต์ที่มีความยาวตัวแปรของ stdarg 3 ถูกแปลงเป็นเอาท์พุท. 99 และ POSIX 1-2001 ระบุว่าผลลัพธ์จะไม่ได้กำหนดไว้หากมีการเรียก sprintf, snprintf , vsprintf หรือ vsnprintf จะทำให้การคัดลอกเกิดขึ้นระหว่างวัตถุที่ทับซ้อนกันเช่นถ้าสตริงอาร์กิวเมนต์เป้าหมายและอาร์กิวเมนต์อินพุตที่ระบุให้อ้างอิงบัฟเฟอร์เดียวกันโปรดดูที่ NOTES. Return value เมื่อกลับมาสำเร็จฟังก์ชันเหล่านี้จะคืนจำนวนอักขระที่พิมพ์ ไม่รวมไบต์โมฆะที่ใช้เพื่อสิ้นสุดผลลัพธ์ไปยังสตริงฟังก์ชัน snprintf และ vsnprintf ไม่ได้เขียนมากกว่าไบต์ขนาดรวมทั้งไบต์โมฆะที่ยกเลิก 0 ถ้า th เอาท์พุท e ถูกตัดทอนเนื่องจากข้อ จำกัด นี้แล้วค่าที่ส่งกลับเป็นจำนวนอักขระที่ไม่รวมไบต์โมฆะที่ถูกยกเลิกซึ่งจะถูกเขียนไปยังสตริงสุดท้ายถ้ามีเนื้อที่ว่างเพียงพอดังนั้นค่าส่งกลับของขนาดหรือมากกว่าหมายความว่าเอาท์พุท ถูกตัดทอนโปรดดูที่ด้านล่างใต้ NOTES หากพบข้อผิดพลาดในการส่งออกค่าเป็นค่าลบจะถูกส่งกลับรูปแบบของสตริงรูปแบบสตริงรูปแบบเป็นสตริงอักขระเริ่มต้นและสิ้นสุดในสถานะการเปลี่ยนสถานะเริ่มต้นถ้ามีสตริงรูปแบบประกอบด้วย ของศูนย์หรือมากกว่าตัวอักษรธรรมดาสามัญไม่ซึ่งจะถูกคัดลอกไปยังกระแสข้อมูลขาออกและข้อกำหนดการแปลงซึ่งแต่ละผลลัพธ์ในการเรียกศูนย์หรือมากกว่าอาร์กิวเมนต์ที่ตามมาข้อกำหนดการแปลงแต่ละตัวจะถูกนำมาใช้โดยตัวอักษรและลงท้ายด้วยตัวระบุการแปลงระหว่างนั้นอาจ อยู่ในลำดับนี้ศูนย์หรือมากกว่าธงความกว้างของฟิลด์ขั้นต่ำที่เลือกได้ความแม่นยำเสริมและตัวปรับความยาวตัวเลือกอาร์กิวเมนต์ต้อง correspon d อย่างถูกต้องหลังจากโปรโมชันประเภทกับตัวระบุการแปลงโดยค่าเริ่มต้นอาร์กิวเมนต์จะถูกใช้ตามลำดับที่ระบุโดยที่แต่ละและแต่ละตัวระบุการแปลงจะถามอาร์กิวเมนต์ถัดไปและเป็นข้อผิดพลาดถ้ามีการระบุอาร์กิวเมนต์ไม่เพียงพอจำนวนหนึ่งสามารถระบุได้อย่างชัดเจนว่าอาร์กิวเมนต์ใด ถูกนำมาใช้ในแต่ละสถานที่ที่มีการโต้เถียงโดยการเขียน m แทนที่จะแทน m ซึ่งเลขทศนิยมแทน m ระบุตำแหน่งในอาร์กิวเมนต์ที่ต้องการอาร์กิวเมนต์ที่จัดทำดัชนีไว้เริ่มต้นจาก 1 ดังนั้นจึงเทียบเท่ากับส่วนที่สอง สไตล์ช่วยให้การอ้างอิงซ้ำไปยังอาร์กิวเมนต์เดียวกันมาตรฐาน C99 ไม่รวมถึงการใช้สไตล์ซึ่งมาจากข้อกำหนดของ UNIX เดียวถ้าใช้รูปแบบการใช้งานจะต้องใช้ตลอดทั้งการแปลงทั้งหมดโดยใช้อาร์กิวเมนต์และอาร์กิวเมนต์ความกว้างและความแม่นยำทั้งหมด แต่อาจผสมกับรูปแบบที่ไม่ใช้อาร์กิวเมนต์อาจไม่มีช่องว่างในจำนวนอาร์กิวเมนต์ที่ระบุโดยใช้ตัวอย่างเช่นถ้าอาร์กิวเมนต์ 1 และ 3 ระบุอีกครั้งอาร์กิวเมนต์ 2 ต้องระบุไว้ที่ใดแห่งหนึ่งในสตริงรูปแบบสำหรับการแปลงตัวเลขเป็นจำนวนเต็มทศนิยมของตัวอักษร radix หรือใช้ตัวจัดกลุ่มพันตัวอักษรที่แท้จริงใช้ขึ้นอยู่กับส่วนของ LCNUMERIC ของโลแคลตำแหน่งที่ตั้ง POSIX ใช้เป็นอักขระ radix, และไม่มีตัวจัดกลุ่มดังนั้นผลลัพธ์ใน 1234567 89 ในตำแหน่ง POSIX ใน 1234567,89 ในตำแหน่งที่ตั้ง nlNL และใน 1 234 567,89 ในตำแหน่งที่ตั้ง daDK อักขระ flag มีอักขระตามด้วยศูนย์หรือมากกว่า ของค่าสถานะต่อไปนี้ค่าควรถูกแปลงเป็นรูปแบบอื่นสำหรับการแปลง o อักขระตัวแรกของสตริงเอาต์พุตจะทำเป็นศูนย์โดย prefixing 0 ถ้าไม่ใช่ศูนย์แล้วสำหรับ x และ X conversion ผลลัพธ์อื่นที่ไม่ใช่สตริง 0x หรือ 0X สำหรับการแปลง X ก่อนหน้านี้สำหรับผลลัพธ์ของการแปลง A e E f F g และ G ผลลัพธ์จะประกอบด้วยจุดทศนิยมเสมอแม้ว่าจะไม่มีตัวเลขตามปกติก็ตามจุดทศนิยมจะปรากฏในผลลัพธ์ของ Conversion เหล่านี้เฉพาะเมื่อ การโฆษณา igit ต่อไปนี้สำหรับการแปลง g และ G ศูนย์ท้ายจะไม่ถูกเอาออกจากผลลัพธ์ตามที่เป็นไปได้สำหรับการแปลงอื่น ๆ ผลที่ได้คือไม่ได้กำหนดค่าควรเป็นศูนย์เบาะสำหรับ dioux X a e f f g และ g แปลง, ค่าที่แปลงจะเบาะด้านซ้ายด้วยศูนย์แทนช่องว่างหากค่า 0 และ - flags ปรากฏขึ้นค่า 0 จะถูกละเว้นถ้าค่าความแม่นยำถูกกำหนดด้วย dioux การแปลงตัวเลขและ X เครื่องหมาย 0 จะถูกละเว้นสำหรับการแปลงอื่น ๆ พฤติกรรมที่ไม่ได้กำหนดค่าที่แปลงจะถูกปรับให้เหลืออยู่บนขอบเขตฟิลด์ค่าดีฟอลต์คือเหตุผลที่ถูกต้องยกเว้นสำหรับ n Conversion ค่าที่แปลงจะเบาะด้านขวาด้วยช่องว่างมากกว่าด้านซ้ายที่มีช่องว่างหรือศูนย์ - แทนที่ a 0 ถ้าทั้งสองได้รับ ช่องว่างช่องว่างควรวางไว้ก่อนตัวเลขบวกหรือสตริงที่ว่างเปล่าที่เกิดจากการแปลงที่ลงชื่อลงชื่อเข้าใช้หรือควรวางไว้ก่อนตัวเลขที่สร้างขึ้นโดยการแปลงที่ลงชื่อเข้าใช้โดยค่าเริ่มต้นจะมีการใช้เครื่องหมายสำหรับตัวเลขลบแทน A แทนที่ช่องว่าง ถ้าทั้งสองใช้ตัวอักษรห้าตัวด้านบนถูกกำหนดไว้ในมาตรฐาน C SUSv2 ระบุอักขระธงหนึ่งเพิ่มเติมสำหรับการแปลงทศนิยม iduf F g G เอาต์พุตจะถูกจัดกลุ่มด้วยอักขระการจัดกลุ่มหลายพันถ้าข้อมูลตำแหน่งระบุใด ๆ โปรดทราบว่าหลายเวอร์ชัน ของ gcc 1 ไม่สามารถแยกตัวเลือกนี้ได้และจะออกคำเตือน SUSv2 ไม่รวม F glibc 2 2 เพิ่มอักขระ flag อีกหนึ่งตัวสำหรับการแปลงเลขฐานสิบครั้ง idu เอาต์พุตใช้ตำแหน่งทางเลือกของ locale ถ้ามีตัวอย่างเช่นตั้งแต่ glibc 2 2 3 นี้จะให้ตัวเลข Arabic-Indic ในสถานที่ faIR เปอร์เซียความกว้างของเขตข้อมูลสตริงทศนิยมที่เป็นตัวเลือกที่มีเลขทศนิยมแรกที่ไม่ใช่ศูนย์ระบุความกว้างของฟิลด์ขั้นต่ำถ้าค่าที่แปลงแล้ว มีอักขระน้อยกว่าความกว้างของเขตข้อมูลจะมีเบาะที่มีช่องว่างด้านซ้ายหรือด้านขวาหากได้รับการตั้งค่าสถานะการปรับค่าทางซ้ายแทนที่จะเป็นเลขทศนิยมที่หนึ่งอาจเขียนหรือ m สำหรับจำนวนเต็มทศนิยม m จำนวนหนึ่งเพื่อระบุว่าฟิลด์นั้น ความกว้างจะได้รับในอาร์กิวเมนต์ถัดไปหรือในอาร์กิวเมนต์ m - th ตามลำดับซึ่งต้องเป็นประเภท int ความกว้างของสนามเชิงลบจะถูกนำมาเป็นค่าสถานะ - ตามด้วยความกว้างของสนามในกรณีที่ไม่มีความกว้างของฟิลด์ที่ไม่มีอยู่หรือเล็ก ทำให้เกิดการตัดทอนของเขตข้อมูลหากผลของการแปลงกว้างกว่าความกว้างของเขตข้อมูลเขตข้อมูลจะถูกขยายเพื่อให้มีผลการแปลงค่าความแม่นยำความแม่นยำเสริมในรูปแบบของช่วงตามด้วยสตริงที่เป็นทศนิยมแทน เลขทศนิยมทศนิยมหนึ่งอาจเขียนหรือ m สำหรับจำนวนเต็มทศนิยม m จำนวนหนึ่งเพื่อระบุว่าความถูกต้องจะได้รับในอาร์กิวเมนต์ถัดไปหรือในอาร์กิวเมนต์ m-th ตามลำดับซึ่งต้องเป็นประเภท int ถ้าความแม่นยำถูกกำหนดเป็นเพียงหรือ ความแม่นยำเป็นลบ t เขาให้ความแม่นยำเป็นศูนย์ซึ่งจะให้ตัวเลขจำนวนต่ำสุดที่จะปรากฏสำหรับการแปลง dioux และ X จำนวนตัวเลขที่จะปรากฏหลังจากตัวอักษร radix สำหรับการแปลง e e f และ f จำนวนสูงสุดของตัวเลขที่สำคัญสำหรับ g และ G หรือจำนวนสูงสุดของอักขระที่จะพิมพ์จากสตริงสำหรับ s และแปลง S การปรับความยาวที่นี่การแปลงจำนวนเต็มย่อมาจาก dioux หรือแปลง X hh. A แปลงต่อไปนี้เป็นจำนวนเต็มสอดคล้องกับถ่านลงนามหรืออาร์กิวเมนต์ถ่าน unsigned หรือการแปลง n ต่อไปนี้สอดคล้องกับตัวชี้ไปยังอาร์กิวเมนต์ char ที่เซ็นชื่อการแปลงจำนวนเต็มต่อไปนี้สอดคล้องกับ int สั้นหรืออาร์กิวเมนต์ int สั้นที่ไม่ได้ลงชื่อหรือการแปลง n ต่อไปนี้สอดคล้องกับตัวชี้ไปยังอาร์กิวเมนต์ int สั้น ell การแปลงจำนวนเต็มต่อไปนี้สอดคล้องกับ int ยาวหรืออาร์เรย์ int ยาว unsigned หรือการแปลง n ต่อไปนี้สอดคล้องกับตัวชี้ไปยังอาร์กิวเมนต์ int ยาวหรือการแปลง c ต่อไปนี้สอดคล้องกับอาร์กิวเมนต์ wintt หรือการแปลงต่อไปนี้สอดคล้องกับ ตัวชี้ไปอาร์กิวเมนต์ wchart ell-ell การแปลงจำนวนเต็มต่อไปนี้สอดคล้องกับ long long int หรือ unsigned long long int หรือการแปลง n ต่อไปนี้สอดคล้องกับตัวชี้ไปยังอาร์กิวเมนต์ int ยาว ๆ ตาม e e f f g หรือ g แปลงที่สอดคล้องกับ อาร์กิวเมนต์คู่ยาว C99 ช่วยให้ LF แต่ SUSv2 ไม่ได้ quad 4 4BSD และ Linux libc5 เท่านั้นใช้งาน Don t นี่เป็นคำพ้องสำหรับ ll. A การแปลงจำนวนเต็มต่อไปนี้สอดคล้องกับ intmaxt หรืออาร์กิวเมนต์ uintmaxt การแปลงจำนวนเต็มต่อไปนี้สอดคล้องกับ sizet หรือ ssizet อาร์กิวเมนต์ libc5 Linux มี Z กับความหมายนี้ Don t ใช้ การแปลงจำนวนเต็มต่อไปนี้สอดคล้องกับอาร์กิวเมนต์ ptrdifft SUSv2 รู้เกี่ยวกับตัวปรับความยาวเฉพาะใน h h h h h h h h h h h h h h l h l h l h l h l h l h l h l h l h l h l h l h l h l h l h l h l h l h l h l h l h l l l l l l l และ L ใน Le LE lf Lg LG. The แปลง specifier อักขระที่ระบุชนิดของการแปลงที่จะใช้ตัวระบุการแปลงและความหมายของพวกเขาคือ d i อาร์กิวเมนต์ int ถูกแปลงเป็นเครื่องหมายทศนิยมที่ลงนามความแม่นยำถ้ามีให้ตัวเลขขั้นต่ำที่ต้องปรากฏหากต้องการแปลงค่า ตัวเลขน้อยลงจะมีเบาะที่ด้านซ้ายพร้อมกับศูนย์ความแม่นยำเริ่มต้นคือ 1 เมื่อ 0 ถูกพิมพ์ด้วยความแม่นยำอย่างชัดเจน 0 ผลลัพธ์จะว่างเปล่า oux X อาร์กิวเมนต์ int ที่ไม่ได้ลงชื่อถูกแปลงเป็น unsigned octal o, unsigned u decimal หรือ unsigned hexadecimal x และ X สัญกรณ์ตัวอักษร abcdef ใช้สำหรับการแปลง x ตัวอักษร ABCDEF จะใช้สำหรับการแปลง X ความแม่นยำถ้ามีให้ตัวเลขขั้นต่ำที่ต้องปรากฏถ้าค่าที่แปลงแล้วต้องการตัวเลขน้อยลงจะเบาะ ด้านซ้ายกับศูนย์ค่าดีฟอลต์เริ่มต้นคือ 1 เมื่อ 0 ถูกพิมพ์ด้วยความแม่นยำที่ชัดเจน 0 ผลลัพธ์จะไม่ว่าง e E อาร์กิวเมนต์คู่จะถูกปัดเศษและแปลงเป็นรูปแบบ - dd ddd dd ที่มีหนึ่งหลักก่อนจุดทศนิยม ตัวชี้และตัวเลขของตัวเลขหลังจากที่มีค่าเท่ากับความแม่นยำหากความแม่นยำหายไปจะใช้เป็น 6 ถ้าความแม่นยำเป็นศูนย์และไม่มีตัวอักษรทศนิยมปรากฏตัวแปลง E ใช้ตัวอักษร E แทน e เพื่อแนะนำ เลขยกกำลังเลขยกกำลังเสมอประกอบด้วยตัวเลขอย่างน้อยสองหลักถ้าค่าเป็นศูนย์เลขยกกำลังคือ 00 อาร์กิวเมนต์คู่จะถูกปัดเศษและแปลงเป็นรูปแบบทศนิยมในรูปแบบ ddd ddd ซึ่งเป็นตัวเลขของตัวเลขหลังจาก charac เลขทศนิยม ter มีค่าเท่ากับความแม่นยำในการระบุหากความแม่นยำขาดหายไปจะใช้เป็น 6 ถ้าความแม่นยำเป็นศูนย์อย่างชัดเจนและไม่มีจุดทศนิยมปรากฏหากจุดทศนิยมปรากฏขึ้นอย่างน้อยหนึ่งตัวเลขปรากฏขึ้นก่อนหน้า SUSv2 ไม่ทราบเกี่ยวกับ F และบอกว่าการแสดงสตริงตัวอักษรสำหรับอินฟินิตี้และ NaN อาจมีอยู่มาตรฐาน C99 ระบุ - inf หรือ - อินฟินิตี้สำหรับอินฟินิตี้และสตริงที่เริ่มต้นด้วย nan สำหรับ NaN ในกรณีของการแปลง f และ - INF หรือ - INFINITY หรือ NAN ในกรณีของการแปลง F g อาร์กิวเมนต์คู่ถูกแปลงเป็นรูปแบบ f หรือ e หรือ F หรือ E สำหรับการแปลง G ความแม่นยำระบุจำนวนหลักที่มีนัยสำคัญหากความแม่นยำขาดหายไปจะมีตัวเลข 6 ตัวหากความแม่นยำเป็นศูนย์ จะถือว่าเป็น 1 รูปแบบ e ถ้าเลขยกกำลังจากการแปลงน้อยกว่า -4 หรือมากกว่าหรือเท่ากับค่าความถูกต้องตามด้วยค่าศูนย์ท้ายจะถูกลบออกจากส่วนที่เป็นเศษส่วนของผลจุดทศนิยมจะปรากฏเฉพาะเมื่อมีการปฏิบัติตาม ที่ le ast หนึ่งหลัก C99 ไม่อยู่ใน SUSv2 สำหรับการแปลงอาร์กิวเมนต์คู่จะถูกแปลงเป็นสัญกรณ์เลขฐานสิบหกโดยใช้ตัวอักษร abcdef ในสไตล์ - 0x h hhhh p สำหรับการแปลงคำนำหน้า 0X ตัวอักษร ABCDEF และมีการใช้ตัวแบ่งเลขแทนเลขฐานสิบหก ก่อนจุดทศนิยมและจำนวนของตัวเลขหลังจากที่มีค่าเท่ากับความแม่นยำความแม่นยำเริ่มต้นจะเพียงพอสำหรับการแสดงค่าที่แน่นอนหากมีการระบุตำแหน่งที่แน่นอนในฐาน 2 และมีขนาดใหญ่เพียงพอที่จะแยกแยะค่าของประเภทคู่ตัวเลขก่อน จุดทศนิยมคือไม่ระบุสำหรับตัวเลข nonnormalized และไม่ใช่ศูนย์ แต่ไม่ได้ระบุไว้เป็นอย่างอื่นสำหรับตัวเลขที่เป็นปกติหากไม่มีการปรับปรุง l เป็นปัจจุบันอาร์กิวเมนต์ int จะถูกแปลงเป็นอักขระที่ไม่ได้ลงชื่อและอักขระที่เป็นผลลัพธ์จะถูกเขียนขึ้นถ้ามีการปรับปรุง l อยู่ในช่วงกว้าง อาร์เรย์อักขระถูกแปลงเป็นลำดับ multibyte โดยการเรียกไปยัง wcrtomb 3 ฟังก์ชันโดยมีสถานะ Conversion เริ่มต้นในสถานะเริ่มต้นและ resul ting สตริง multibyte ถูกเขียนหากไม่มี l modifier อาร์กิวเมนต์ const char คาดว่าจะเป็นตัวชี้ไปยังอาร์เรย์ของตัวชี้ประเภทอักขระไปยังสตริงอักขระจากอาร์เรย์ถูกเขียนขึ้นเป็น แต่ไม่รวมไบต์โมฆะที่ยกเลิก 0 ถ้า ความละเอียดถูกระบุไม่เกินจำนวนที่ระบุไว้หากไม่มีความแม่นยำจะต้องไม่มีไบต์โมเลกุลที่จำเป็นถ้าไม่มีความแม่นยำหรือมากกว่าขนาดของอาร์เรย์อาร์เรย์ต้องมีไบต์โมฆะที่ยกเลิกถ้า มีตัวแก้ไข l อยู่อาร์กิวเมนต์ const wchart คาดว่าจะเป็นตัวชี้ไปยังอาร์เรย์ของอักขระกว้างอักขระกว้าง ๆ จากอาร์เรย์จะถูกแปลงเป็นอักขระหลายไบต์โดยเรียกไปยังฟังก์ชัน wcrtomb 3 ซึ่งมีสถานะ Conversion เริ่มต้นในสถานะเริ่มต้น ก่อนตัวอักษรกว้างตัวแรกขึ้นและรวมถึงอักขระแบบ null กว้างสุดที่ยกเลิกอักขระ multibyte ที่สร้างขึ้นจะถูกเขียนขึ้น แต่ไม่รวมไบต์โมฆะที่ยกเลิกถ้าระบุความแม่นยำไม่มี ไบต์มากกว่าจำนวนที่ระบุจะถูกเขียนขึ้น แต่ไม่มีการเขียนอักขระ multibyte บางส่วนโปรดทราบว่าความแม่นยำกำหนดจำนวนไบต์ที่เขียนไม่ใช่จำนวนอักขระที่กว้างหรือตำแหน่งบนหน้าจออาร์เรย์ต้องมีอักขระ null ที่ยกเลิกโดยสิ้นเชิง ให้และมีขนาดเล็กที่จำนวนไบต์ที่เขียนเกินกว่าก่อนสิ้นอาร์เรย์ถึง C. ไม่อยู่ใน C99 แต่ใน SUSv2 พ้องสำหรับ lc Don t use ไม่ได้อยู่ใน C99 แต่ใน SUSv2 Synonym for ls การใช้งาน Don t use อาร์กิวเมนต์ตัวชี้แบบเป็นโมฆะจะพิมพ์เป็นเลขฐานสิบหกเช่นถ้าเป็นตัวเลข x หรือ lx จำนวนอักขระที่เขียนจนถึงจะถูกเก็บไว้ในจำนวนเต็มที่ระบุโดยอาร์กิวเมนต์ int หรือ variant pointer ไม่มี อาร์กิวเมนต์ถูกแปลง ขยาย Glibc พิมพ์ผลลัพธ์ของ strerror errno อาร์กิวเมนต์ไม่จำเป็นต้องเขียน A ไม่มีอาร์กิวเมนต์ถูกแปลงข้อมูลจำเพาะของการแปลงที่สมบูรณ์คือการปรับแต่งเพื่อให้ฟังก์ชัน fprintf, printf, sprintf, vprintf, vfprintf และ vsprintf สอดคล้องกับ C89 และ C99 snprintf และ vsnprintf ทำงานสอดคล้องกับ C99.Concerning ค่าตอบแทนของ snprintf, SUSv2 และ C99 ขัดแย้งกันเมื่อ snprintf เรียกว่ามีขนาด 0 แล้ว SUSv2 กำหนดค่าที่ส่งกลับไม่ได้ระบุน้อยกว่า 1 ในขณะที่ C99 ช่วยให้ STR เป็นโมฆะในกรณีนี้และให้ ค่าส่งกลับเป็นเสมอเป็นจำนวนตัวอักษรที่จะได้รับการเขียนในกรณีที่สตริงเอาต์พุตได้รับการขนาดใหญ่พอลิตร libc4 รู้เกี่ยวกับธงมาตรฐานห้า C มันรู้เกี่ยวกับการปรับความยาว hl L และการแปลง cde E f F g G inopsux และ X ซึ่ง F เป็นคำพ้องสำหรับ f นอกจากนี้ยังยอมรับ DO และ U เป็นคำพ้องสำหรับ ld lo and lu นี่เป็นเรื่องไม่ดีและเกิดข้อผิดพลาดร้ายแรงในภายหลังเมื่อการสนับสนุน D หายไป cale-dependent radix character ไม่มี separator หลายพันไม่มี NaN หรือ infinity ไม่มี m และ m. Linux libc5 รู้เกี่ยวกับ flag มาตรฐาน 5 C และ flag, locale, m และ m มันรู้เกี่ยวกับการปรับความยาว hl LZ และ q แต่ยอมรับ L และ q ทั้งคู่ยาวและยาว int ยาวนี้เป็นข้อบกพร่องมันไม่รู้จัก FDO และ U แต่เพิ่มตัวแปลง m ซึ่งส่งออก strerror errno. glibc 2 0 เพิ่มตัวแปลง C และ S. glibc 2 1 เพิ่มความยาวปรับเปลี่ยน hh jt และ z และตัวแปลง a และ. glibc 2 2 เพิ่มตัวแปลง F พร้อมด้วย C99 semantics และ flag character I. โปรแกรมบางโปรแกรมไม่สามารถพึ่งพาโค้ดเช่น following. sprintf buf บางข้อความเพิ่มเติม buf เพื่อผนวกข้อความไปยัง buf อย่างไรก็ตามมาตรฐานทราบอย่างชัดเจนว่าผลลัพธ์จะไม่ได้รับการกำหนดถ้าแหล่งข้อมูลและปลายทางจะทับซ้อนกันเมื่อเรียก sprintf, snprintf, vsprintf และ vsnprintf ขึ้นอยู่กับเวอร์ชันของ gcc 1 ที่ใช้และตัวเลือกคอมไพเลอร์ที่ใช้เช่น wi ข้างต้น จะไม่ก่อให้เกิดผลลัพธ์ที่คาดหวังการใช้งาน glibc ของฟังก์ชัน snprintf และ vsnprintf สอดคล้องกับมาตรฐาน C99 นั่นคือปฏิบัติตามที่อธิบายไว้ข้างต้นตั้งแต่เวอร์ชัน glibc 2 1 จนกระทั่ง glibc 2 0 6 จะคืน -1 เมื่อเอาต์พุตถูกตัดทอน เนื่องจาก sprintf และ vsprintf ถือว่าเป็นสตริงที่ยาวโดยพลการผู้โทรจะต้องระมัดระวังไม่ให้ล้นพื้นที่ที่เกิดขึ้นจริงซึ่งมักจะเป็นไปไม่ได้ที่จะมั่นใจได้หมายเหตุว่าความยาวของสตริงที่ผลิตขึ้นอยู่กับท้องถิ่นขึ้นอยู่กับและยากที่จะคาดเดาใช้ snprintf และ vsnprintf แทนหรือ asprintf 3 และ vasprintf 3.Linux libc4 45 ไม่มี snprintf แต่ให้ libbsd ที่มี snprintf เทียบเท่า sprintf นั่นคือส่วนที่ไม่สนใจอาร์กิวเมนต์ขนาดดังนั้นการใช้ snprintf กับ libc4 ทำให้เกิดปัญหาด้านความปลอดภัยที่ร้ายแรง รหัสเช่น printf foo มักแสดงข้อผิดพลาดเนื่องจาก foo อาจมีอักขระถ้า foo มาจากอินพุตของผู้ใช้ที่ไม่น่าเชื่อถืออาจมี n ซึ่งทำให้ printf เขียนลงในหน่วยความจำและ creati ของหลุมรักษาความปลอดภัยหากต้องการพิมพ์เลข pi ถึงทศนิยม 5 ตำแหน่งหากต้องการพิมพ์วันที่และเวลาในแบบฟอร์มอาทิตย์ 3 กรกฎาคม 10 02 ในวันธรรมดาและเดือนเป็นตัวชี้ไปที่สายหลายประเทศใช้คำสั่งซื้อแบบวันเดือนปี internationalized version must be able to print the arguments in an order specified by the format where format depends on locale, and may permute the arguments With the value one might obtain Sonntag, 3 Juli, 10 02.To allocate a sufficiently large string and print into it code correct for both glibc 2 0 and glibc 2 1.If truncation occurs in glibc versions prior to 2 0 6, this is treated as an error instead of being handled gracefully. Referenced By.

No comments:

Post a Comment