国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

C語言打印字符串的一部分的方法

2019-11-14 08:48:48
字體:
供稿:網(wǎng)友

http://c.biancheng.net/cpp/html/1575.html

C語言打印字符串的一部分的方法

頭文件:#include <stdio.h>sPRintf()函數(shù)用于將格式化的數(shù)據(jù)寫入字符串,其原型為:    int sprintf(char *str, char * format [, argument, ...]);【參數(shù)】str為要寫入的字符串;format為格式化字符串,與printf()函數(shù)相同;argument為變量。除了前兩個參數(shù)類型固定外,后面可以接任意多個參數(shù)。而它的精華,顯然就在第二個參數(shù)--格式化字符串--上。 printf()和sprintf()都使用格式化字符串來指定串的格式,在格式串內(nèi)部使用一些以“%”開頭的格式說明符(format specifications)來占據(jù)一個位置,在后邊的變參列表中提供相應的變量,最終函數(shù)就會用相應位置的變量來替代那個說明符,產(chǎn)生一個調(diào)用者想要的字符串。sprintf()最常見的應用之一莫過于把整數(shù)打印到字符串中,如:    sprintf(s, "%d", 123);  //把整數(shù)123打印成一個字符串保存在s中    sprintf(s, "%8x", 4567);  //小寫16進制,寬度占8個位置,右對齊sprintf的作用是將一個格式化的字符串輸出到一個目的字符串中,而printf是將一個格式化的字符串輸出到屏幕。sprintf的第一個參數(shù)應該是目的字符串,如果不指定這個參數(shù),執(zhí)行過程中出現(xiàn) "該程序產(chǎn)生非法操作,即將被關(guān)閉...."的提示。sprintf()會根據(jù)參數(shù)format 字符串來轉(zhuǎn)換并格式化數(shù)據(jù),然后將結(jié)果復制到參數(shù)str 所指的字符串數(shù)組,直到出現(xiàn)字符串結(jié)束('/0')為止。關(guān)于參數(shù)format 字符串的格式請參考printf()。【返回值】成功則返回參數(shù)str 字符串長度,失敗則返回-1,錯誤原因存于errno 中。注意:C語言對數(shù)組進行操作時并不檢測數(shù)組的長度,如果str的長度不夠,sprintf()很容易造成緩沖區(qū)溢出,帶來意想不到的后果,黑客經(jīng)常利用這個弱點攻擊看上去安全的系統(tǒng)。請看下面的代碼:
#include <stdio.h>main(){    char buf[10];    sprintf(buf, "The length of the string is more than 10");    printf("%s", buf);}編譯并運行,屏幕上輸出”The length of the string is more than 10“,同時系統(tǒng)提示程序已經(jīng)停止。原因就是要寫入的字符串的長度超過了buf的長度,造成緩沖區(qū)溢出。使用snprintf()來代替sprintf()將能夠很好的解決這個問題。【實例】打印字母a的ASCII值。
#include <stdio.h>main(){    char a = 'a';    char buf[80];    sprintf(buf, "The ASCII code of a is %d.", a);    printf("%s", buf);}運行結(jié)果:The ASCII code of a is 97.又如,產(chǎn)生10個100以內(nèi)的隨機數(shù)并輸出。
#include<stdio.h>#include<stdlib.h>#include<time.h>int main(void){    char str[100];    int offset =0;    int i=0;    srand(time(0));  // *隨機種子    for(i = 0;i<10;i++)    {        offset+=sprintf(str+offset,"%d,",rand()%100);  // 格式化的數(shù)據(jù)寫入字符串    }    str[offset-1]='/n';    printf(str);    return 0;}運行結(jié)果:74,43,95,95,44,90,70,23,66,84例子使用了一個新函數(shù)srand(),它能產(chǎn)生隨機數(shù)。例子中最復雜的部分是for循環(huán)中每次調(diào)用函數(shù)sprintf()往字符數(shù)組寫數(shù)據(jù)的時候,str+foffset為每次寫入數(shù)據(jù)的開始地址,最終的結(jié)果是所有產(chǎn)生的隨機數(shù)據(jù)都被以整數(shù)的形式存入數(shù)組中。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 紫云| 景德镇市| 阜南县| 两当县| 上蔡县| 广元市| 新泰市| 探索| 梁河县| 福建省| 吴川市| 内江市| 崇阳县| 厦门市| 台安县| 永寿县| 延庆县| 辛集市| 内乡县| 灵璧县| 四川省| 东辽县| 延安市| 隆林| 铁岭市| 富锦市| 自贡市| 名山县| 和硕县| 邮箱| 西青区| 修文县| 刚察县| 城固县| 曲靖市| 景德镇市| 仪陇县| 洪江市| 青龙| 邯郸县| 富平县|