1樓:好程式設計師
sprintf函式原型為 int sprintf(char *str, const char *format, ...)。作用是格式化字串,具體功能如下所示:
(1)將數字變數轉換為字串。
(2)得到整型變數的16進位制和8進位制字串。
(3)連線多個字串。
舉例如下所示:
1 char str[256] = ;
2 int data = 1024;
3 //將data轉換為字串
4 sprintf(str,"%d",data);
5 //獲取data的十六進位制
6 sprintf(str,"0x%x",data);
7 //獲取data的八進位制
8 sprintf(str,"0%o",data);
9 const char *s1 = "hello";
10 const char *s2 = "world";
11 //連線字串s1和s2
12 sprintf(str,"%s %s",s1,s2);
3、sscanf函式
sscanf函式原型為int sscanf(const char *str, const char *format, ...)。將引數str的字串根據引數format字串來轉換並格式化資料,轉換後的結果存於對應的引數內。
具體功能如下:
(1)根據格式從字串中提取資料。如從字串中取出整數、浮點數和字串等。
(2)取指定長度的字串
(3)取到指定字元為止的字串
(4)取僅包含指定字符集的字串
(5)取到指定字符集為止的字串
sscanf可以支援格式字元%:
(1)-: 表示範圍,如:%[1-9]表示只讀取1-9這幾個數字 %[a-z]表示只讀取a-z小寫字母,類似地 %[a-z]只讀取大寫字母
(2)^: 表示不取,如:%[^1]表示讀取除'1'以外的所有字元 %[^/]表示除/以外的所有字元
(3),: 範圍可以用","相連線 如%[1-9,a-z]表示同時取1-9數字和a-z小寫字母
(4)原則:從第一個在指定範圍內的數字開始讀取,到第一個不在範圍內的數字結束%s 可以看成% 的一個特例 %[^ ](注意^後面有一個空格!)
104、snprintf函式
snprintf函式是sprintf函式的更加安全版本,考慮到字串的位元組數,防止了字串溢位。函式形式為:int snprintf(char *restrict buf, size_t n, const char * restrict format, ...
);。最多從源串中拷貝n-1個字元到目標串中,然後再在後面加一個0。所以如果目標串的大小為n 的話,將不會溢位。
5、測試程式
1 #include
2 #include
3 4 #define ip_str_len 18
5 #define mac_str_len 18
6 #define mac_bit_len 6
7 #define little_endian 0
8 #define big_endian 1
9 10 typedef unsigned char uchar;
11 typedef unsigned int uint;
12 13 int big_little_endian()
14 20
21 uint ipstr2int(const char * ipstr)
22 34
35 char *int2ipstr(const uint ip, char *ipstr, const uint ip_str_len)
36 53
55 char *mac2str(const unsigned char *mac,char *mac_str,const uint mac_str_len)
56 62
63 int main()
64 ;
66 char mac_str[mac_str_len] = ;
67 unsigned char mac[mac_bit_len] = ;
68 const char *ipstr = "10.0.3.193";
69 unsigned int ip;
70 int2ipstr(167773121,ip_str,ip_str_len);
71 mac2str(mac,mac_str,mac_str_len);
72 ip = ipstr2int(ipstr);
73 printf("%s\n",ip_str);
74 printf("%s\n",mac_str);
75 printf("ip:%u\n",ip);
76 return 0;
77 }
程式執行結果如下所示:
2樓:華夏
原型int sprintf( char *buffer, const char *format, [ argument] … );
str是將要寫入的字串
/l 在c語言裡面它還是/l沒有變
%%i是%i的意思 在字串裡面要是想輸出%,必須用%%%d對應著num
比如你輸入5
str裡面就是for /l %i in (1.1.5) do start calc
system(str)就是把這個字串當成一個命令傳送給cmd
3樓:匿名使用者
sprintf的意思是將「」內的內容按照格式字元寫入str,是嚴格按照資料格式轉換成了字串,比如這裡的num是int型別,給他賦值是1,然後str的結果就是"for /l %i in (1,1,1) do start calc"這裡的%d的值在字串中顯示了,當然/l沒有任何意義可言,%%代表了一個%
c語言中迴圈問題
4樓:匿名使用者
在輸入時,你沒有確定『\0』在**吧。這個不存在,在遍歷的時候,停住是用『\0』,這就不對了吧。
你把i放出去,第二次就用i的大小來定義迴圈次數試試
c語言中strcpy函式的問題
5樓:匿名使用者
strcpy()函式只能拷貝字串。strcpy()函式將源字串的每個位元組拷貝到目錄字串中,當遇到字串末尾的null字元(\0)時,它會刪去該字元,並結束拷貝
6樓:千鋒教育
strcpy是複製字元陣列執行完後目標陣列arr2被覆蓋
也就是arr2成了"abcde",所以strlen函式返回還是5
7樓:覃寞
char arr2[5] = "hello";這樣是無法通過編譯的,因為最後有一個\0
應該是arr2[6]
8樓:苦澀無人愛
strcpy(s1,s2)其中s1的長度必須大於s2的,否則記憶體戳穿發生錯誤,其次把s2copy到s1後系統會在後面新增\0,計算長度時仍會考慮複製後的\0
9樓:匿名使用者
怎麼不是'\0',strcpy會把'\0'也複製過來的
關於c語言中陣列定義問題
10樓:育知同創教育
主函式內定義的陣列在堆疊段中分配記憶體。
全域性變數陣列在資料段中分配記憶體。
一般資料段比堆疊段大很多,
所以堆疊段分配不了的記憶體,資料段可以分配
(1)在堆疊段中分配記憶體,由於太大無法分配,所以錯誤。
(2)在資料段中分配記憶體,資料段可以分配,無錯誤。
(3)陣列比(1)需要的記憶體少,在堆疊段大小範圍內,可以分配,無錯誤(4)同(3)
一個關於c語言中++a的問題
11樓:砍侃看
(++a)+(++a)+(++a);
這種表示式的寫法是抄很不好的,因為bai其結果是未定義的,不同du的編譯zhi器得到的結果可能不一樣。所dao以不建議這樣寫,而且對其討論沒有意義,因為你也不知道會得到什麼答案。答案有可能是22,也有可能是24。
因為都沒有錯。
為什麼是22?
因為你的編譯器是這樣處理的,
首先,對a自增,a就是6
再對a自增,這時a就是7
然後相加,注意相加的不是6和7,而是7和7,因為a就是記憶體的一塊,不可能既是6又是7,這時結果是14
再對a自增,a就是8了,然後14+8=22。
在csdn上有個帖子是討論這個問題的,你可以找找。討論的結果就是,這種表示式沒有任何意義。
12樓:兄弟連教育北京總校
首先++a是在用a前就被加了,a++則是在整個語句結束之後之後加的
int a=2
「printf("%d,%d\n",a,++a);」為什麼是專3,3而不是2,3呢 printf是從後往前看引數的,++a,a=3,再屬執行輸出。
「printf("%d,%d\n",++a,a);」為什麼是3,2而不是3,3呢 同理,先看到a,則a=2,然後看到++a,a=3,輸入。
「printf("%d,%d\n",a,a++);」為什麼是2,2,而不是2,3 先看到a++,但++要再整個語句結束之後++,所以a 都輸出2
「printf("%d,%d\n",a++,a);」為社麼是2,2,而不是3,3 先看到a,再看到a++,但是要在語句結束之後加
C語言中函式呼叫問題
如果一個函式要使用引數,它就必須定義接受引數值的變數。形式引數與實際引數 函式定義時填入的引數我們稱之為形式引數,簡稱形參,它們同函式內部的區域性變數作用相同。形參的定義是在函式名之後和函式開始的花括號之前。呼叫時填入的引數,我們稱之為實際引數,簡稱實參。必須確認所定義的形參與呼叫函式的實際引數型別...
c語言中清屏函式是什麼,C語言中清屏函式是什麼?
莊生曉夢 c語言中清屏函式是為清除螢幕上的輸出功能,用法是 void clrscr void 程式例 include int main int i clrscr for i 0 i 20 i cprintf d r n i cprintf r npress any key to clear scre...
c語言 清屏函式,c語言中的清屏函式clrscr 應該怎麼用?
墨汁諾 include include printf 請輸入游標位置 x,y 用逗號隔開 n scanf d,d x,y gotoxy x,y printf x d,y d x,y scanf d x void gotoxy int x,int y 設定游標位置 handle hout getstd...