C語言中的sprint函式問題,C語言中迴圈問題

時間 2021-08-11 17:49:43

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...