สมมติว่าคุณมีสตริงที่ไม่null
ถูกยกเลิกและคุณรู้ขนาดที่แน่นอนแล้วคุณจะพิมพ์สตริงนั้นด้วยprintf
ภาษา C ได้อย่างไร? ฉันจำวิธีการดังกล่าวได้ แต่ตอนนี้หาคำตอบไม่ได้ ...
สมมติว่าคุณมีสตริงที่ไม่null
ถูกยกเลิกและคุณรู้ขนาดที่แน่นอนแล้วคุณจะพิมพ์สตริงนั้นด้วยprintf
ภาษา C ได้อย่างไร? ฉันจำวิธีการดังกล่าวได้ แต่ตอนนี้หาคำตอบไม่ได้ ...
คำตอบ:
มีความเป็นไปได้กับ printf มันจะเป็นดังนี้:
printf("%.*s", stringLength, pointerToString);
ไม่จำเป็นต้องคัดลอกอะไรไม่จำเป็นต้องแก้ไขสตริงหรือบัฟเฟอร์ต้นฉบับ
printf
แม้จะผ่านไป ~ ทศวรรษ ... :)
printf
จะพิมพ์ได้สูงสุด 11 ตัวอักษรหรือจนกว่าจะพบ NULL แล้วแต่ว่ากรณีใดจะเกิดขึ้นก่อน ในตัวอย่างของคุณ NULL มาก่อน ระบุความยาวสูงสุดไม่ได้ทำให้เป็นโมฆะสูญเสีย "สิ้นสุดของสตริง" printf
มันมีความหมายสำหรับ
นี่คือคำอธิบายวิธีการ%.*s
ทำงานและตำแหน่งที่ระบุ
ข้อกำหนดการแปลงในสตริงเทมเพลต printf มีรูปแบบทั่วไป:
% [ param-no $] flags width [ . precision ] type conversion
หรือ
% [ param-no $] flags width . * [ param-no $] type conversion
รูปแบบที่สองคือการรับความแม่นยำจากรายการอาร์กิวเมนต์:
คุณยังสามารถระบุความแม่นยำของ "*" ซึ่งหมายความว่าอาร์กิวเมนต์ถัดไปในรายการอาร์กิวเมนต์ (ก่อนค่าจริงที่จะพิมพ์) ถูกใช้เป็นค่าความแม่นยำ ค่าต้องเป็น int และจะถูกละเว้นหากเป็นลบ
- ไวยากรณ์การแปลงเอาต์พุตในคู่มือ glibc
สำหรับการ%s
จัดรูปแบบสตริงความแม่นยำมีความหมายพิเศษ:
สามารถระบุความแม่นยำเพื่อระบุจำนวนอักขระสูงสุดที่จะเขียน มิฉะนั้นอักขระในสตริงสูงสุด แต่ไม่รวมอักขระ null ที่สิ้นสุดจะถูกเขียนไปยังสตรีมเอาต์พุต
- การแปลงเอาต์พุตอื่น ๆในคู่มือ glibc
ตัวแปรที่มีประโยชน์อื่น ๆ :
"%*.*s", maxlen, maxlen, val
จะจัดชิดขวาแทรกช่องว่างก่อน"%-*.*s", maxlen, maxlen, val
จะจัดชิดซ้าย"%-*.*s", padding, str_view.size(), str_view.data()
คุณสามารถใช้ fwrite () เพื่อ stdout!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
ด้วยวิธีนี้คุณจะส่งออกตัวอักษรแรก (ตัวเลขที่กำหนดในตัวแปร number_of_chars) ไปยังไฟล์ในกรณีนี้เป็น stdout (เอาต์พุตมาตรฐานหน้าจอของคุณ)!
printf("%.*s", length, string)
จะไม่ทำงาน.
ซึ่งหมายถึงการพิมพ์ไบต์ความยาวสูงสุดหรือไบต์ว่างแล้วแต่ว่าอะไรจะเกิดขึ้นก่อน หากอาร์เรย์ของชาร์ที่ไม่สิ้นสุดที่ไม่มีค่าว่างของคุณมีไบต์ว่างก่อนความยาว printf จะหยุดที่สิ่งเหล่านั้นและไม่ดำเนินการต่อ
printf("%.5s", pointerToNonNullTerminatedString);
ความยาวสตริงจะเท่ากับ 5
#include<string.h>
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
int i;
for(i=0;i<n;i++)
{
printf("%c",str[i]);
}
return 0;
}
ฉันแก้ไขรหัสนี่เป็นอีกวิธีหนึ่ง:
#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/
return 0;
}
C
บริบทสตริงทั้งหมดจะสิ้นสุดด้วยค่าว่าง อาร์เรย์ของถ่านที่ไม่มีโมฆะไม่ใช่สตริง ... เป็นอาร์เรย์ของถ่าน :)