±àÕß°´£ºÒ»¸öºÜСµÄÊèºö£¬¾Í»áÄð³ÉΣ»úϵͳ°²È«µÄ´ó»¼£¡¡¿
ʲôÊǸñʽ»¯×Ö·û´®¹¥»÷£¿
¸ñʽ»¯×Ö·û´®Â©¶´Í¬ÆäËûÐí¶à°²È«Â©¶´Ò»ÑùÊÇÓÉÓÚ³ÌÐòÔ±µÄÀÁ¶èÔì³ÉµÄ¡£µ±ÄãÕýÔÚÔĶÁ±¾ÎĵÄʱºò£¬Ò²ÐíÓиö³ÌÐòÔ±ÕýÔÚ±àд´úÂ룬ËûµÄÈÎÎñÊÇ£º´òÓ¡Êä³öÒ»¸ö×Ö·û´®»òÕß°ÑÕâ¸ö´®¿½±´µ½Ä³»º³åÇøÄÚ¡£Ëû¿ÉÒÔд³öÈçϵĴúÂ룺
printf("%s", str);
µ«ÊÇΪÁ˽ÚԼʱ¼äºÍÌá¸ßЧÂÊ£¬²¢ÔÚÔ´ÂëÖÐÉÙÊäÈë6¸ö×Ö½Ú£¬Ëû»áÕâÑùд£º
printf(str);
Ϊʲô²»ÄØ£¿¸ÉÂïÒªºÍ¶àÓàµÄprintf²ÎÊý´ò½»µÀ£¬¸ÉÂïÒª»¨Ê±¼ä·Ö½âÄÇЩÓÞ´ÀµÄ¸ñʽ£¿printfµÄµÚÒ»¸ö²ÎÊýÎÞÂÛÈçºÎ¶¼»áÊä³öµÄ£¡³ÌÐòÔ±ÔÚ²»Öª²»¾õÖдò¿ªÁËÒ»¸ö°²È«Â©¶´£¬¿ÉÒÔÈù¥»÷Õß¿ØÖƳÌÐòµÄÖ´ÐУ¬Õâ¾ÍÊDz»ÄÜ͵ÀÁµÄÔÒòËùÔÚ¡£
Ϊʲô³ÌÐòԱдµÄÊÇ´íÎóµÄÄØ£¿Ëû´«ÈëÁËÒ»¸öËûÏëÒªÖð×Ö´òÓ¡µÄ×Ö·û´®¡£Êµ¼ÊÉϸÃ×Ö·û´®±»printfº¯Êý½âÊÍΪһ¸ö¸ñʽ»¯×Ö·û´®£¨format string£©¡£º¯ÊýÔÚÆäÖÐѰÕÒÌØÊâµÄ¸ñʽ×Ö·û±ÈÈç"%d"¡£Èç¹ûÅöµ½¸ñʽ×Ö·û£¬Ò»¸ö±äÁ¿µÄ²ÎÊýÖµ¾Í´Ó¶ÑÕ»ÖÐÈ¡³ö¡£ºÜÃ÷ÏÔ£¬¹¥»÷ÕßÖÁÉÙ¿ÉÒÔͨ¹ý´òÓ¡³ö¶ÑÕ»ÖеÄÕâЩֵÀ´Íµ¿´³ÌÐòµÄÄÚ´æ¡£µ«ÊÇÓÐЩÊÂÇé¾Í²»ÄÇôÃ÷ÏÔÁË£¬Õâ¸ö¼òµ¥µÄ´íÎóÔÊÐíÏòÔËÐÐÖгÌÐòµÄÄÚ´æÀïдÈëÈÎÒâÖµ¡£
PrintfÖб»ºöÂԵĶ«Î÷
ÔÚ˵Ã÷ÈçºÎΪÁË×Ô¼ºµÄÄ¿µÄÀÄÓÃprintf֮ǰ£¬ÎÒÃÇÓ¦¸ÃÉîÈëÁì»áprintfÌṩµÄÌØÐÔ¡£¼Ù¶¨¶ÁÕßÒÔǰÓùýprintfº¯Êý²¢ÇÒÖªµÀÆÕͨµÄ¸ñʽ»¯ÌØÐÔ£¬±ÈÈçÈçºÎ´òÓ¡ÕûÐͺÍ×Ö·û´®£¬ÈçºÎÖ¸¶¨×î´óºÍ×îС×Ö·û´®¿í¶ÈµÈ¡£³ýÁËÕâЩÆÕͨµÄÌØÐÔÖ®Í⣬»¹ÓÐһЩÉî°ÂºÍÏÊΪÈËÖªµÄÌØÐÔ¡£ÔÚÕâÐ©ÌØÐÔµ±ÖУ¬ÏÂÃæ½éÉܵĶÔÎÒÃDZȽÏÓÐÓãº
* ÔÚ¸ñʽ»¯×Ö·û´®ÖÐÈκÎλÖö¼¿ÉÒԵõ½Êä³ö×Ö·ûµÄ¸öÊý¡£µ±ÔÚ¸ñʽ»¯×Ö·û´®ÖÐÅöµ½"%n"µÄʱºò£¬ÔÚ%nÓò֮ǰÊä³öµÄ×Ö·û¸öÊý»á±£´æµ½ÏÂÒ»¸ö²ÎÊýÀï¡£ÀýÈ磬ΪÁË»ñÈ¡ÔÚÁ½¸ö¸ñʽ»¯µÄÊý×ÖÖ®¼ä¿Õ¼äµÄÆ«Á¿£º
int pos, x = 235, y = 93;
printf("%d %n%d\n", x, &pos, y);
printf("The offset was %d\n", pos);
* %n¸ñʽ·µ»ØÓ¦¸Ã±»Êä³öµÄ×Ö·ûÊýÄ¿£¬¶ø²»ÊÇʵ¼ÊÊä³öµÄ×Ö·ûÊýÄ¿¡£µ±°ÑÒ»¸ö×Ö·û´®¸ñʽ»¯Êä³öµ½Ò»¸ö¶¨³¤»º³åÇøÄÚʱ£¬Êä³ö×Ö·û´®¿ÉÄܱ»½Ø¶Ì¡£²»¿¼Âǽض̵ÄÓ°Ï죬%n¸ñʽ±íʾÈç¹û²»±»½Ø¶ÌµÄÆ«Á¿Öµ£¨Êä³ö×Ö·ûÊýÄ¿£©¡£ÎªÁË˵Ã÷ÕâÒ»µã£¬ÏÂÃæµÄ´úÂë»áÊä³ö100¶ø²»ÊÇ20£º
char buf[20];
int pos, x = 0;
snprintf(buf, sizeof buf, "%.100d%n", x, &pos);
printf("position: %d\n", pos);
¼òµ¥µÄÀý×Ó
³ýÁËÌÖÂÛ³éÏóºÍ¸´ÔÓµÄÀíÂÛ£¬ÎÒÃǽ«»áʹÓÃÒ»¸ö¾ßÌåµÄÀý×ÓÀ´ËµÃ÷ÎÒÃǸղÅÌÖÂÛµÄÔÀí¡£ÏÂÃæÕâ¸ö¼òµ¥µÄ³ÌÐòÄÜÂú×ãÕâ¸öÒªÇó£º
/*
* fmtme.c
* Format a value into a fixed-size buffer
*/
#include <stdio.h>
int
main(int argc, char **argv)
{
char buf[100];
int x;
if(argc != 2)
exit(1);
x = 1;
snprintf(buf, sizeof buf, argv[1]);
buf[sizeof buf - 1] = 0;
printf("buffer (%d): %s\n", strlen(buf), buf);
printf("x is %d/%#x (@ %p)\n", x, x, &x);
return 0;
}
¶ÔÕâ¸ö³ÌÐòÓм¸µã˵Ã÷£ºµÚÒ»£¬Ä¿µÄºÜ¼òµ¥£º½«Ò»¸öͨ¹ýÃüÁîÐд«µÝÖµ¸ñʽ»¯Êä³öµ½Ò»¸ö¶¨³¤µÄ»º³åÇøÀï¡£²¢È·±£»º³åÇøµÄ´óСÏÞÖÆ²»±»Í»ÆÆ¡£ÔÚ»º³åÇø¸ñʽ»¯ºó£¬°ÑËüÊä³ö¡£³ýÁ˰ѲÎÊý¸ñʽ»¯£¬»¹ÉèÖÃÁËÒ»¸öÕûÐÍÖµËæºóÊä³ö¡£Õâ¸ö±äÁ¿ÊÇËæºóÎÒÃǹ¥»÷µÄÄ¿±ê¡£ÏÖÔÚÖµµÃÎÒÃÇ×¢ÒâµÄÊÇÕâ¸öÖµÓ¦¸ÃʼÖÕΪ1¡£
±¾ÎÄÖÐËùÓеÄÀý×Ó¶¼ÊÇÔÚx86 BSD/OS 4.1»úÆ÷ÉÏÍê³É¡£Èç¹ûÄ㵽Īɣ±È¿ËÖ´ÐÐÈÎÎñ³¬¹ý20Äêʱ¼ä¿ÉÄÜ»á¶Ôx86²»ÊìϤ£¬ÕâÊÇÒ»¸ölittle-endian»úÆ÷¡£Õâ¾ö¶¨ÔÚÀý×ÓÖжྫ¶ÈÊý×ֵıíʾ·½·¨¡£ÔÚÕâÀïʹÓõľßÌåÊýÖµ»áÒòΪϵͳµÄ²îÒì¶ø²»Í¬£¬ÕâЩ²îÒì±íÏÖÔÚ²»Í¬Ìåϵ½á¹¹¡¢²Ù×÷ϵͳ¡¢»·¾³ÉõÖÁÊÇÃüÁîÐг¤¶È¡£¾¹ý¼òµ¥µ÷Õû£¬ÕâЩÀý×Ó¿ÉÒÔÔÚÆäËûx86ƽ̨ÉϹ¤×÷¡£Í¨¹ýŬÁ¦Ò²¿ÉÒÔÔÚÆäËûÌåϵ½á¹¹µÄƽ̨ÉϹ¤×÷¡£
±¾ÎÄÕ¸ü¶àÄÚÈÝ£º1 - 2 - ÏÂÒ»Ò³>> |