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

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

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語言中的strlen函式,C語言中的strlen函式

冰 vs 霰 strlen是測量字串長度的 char d 和char a china char b 是等價的 是陣列的表示形式 而char c 卻是字元陣列所以並不能得到結果 strlen函式測量字串中字元個數,不包括結尾的 0 字元,你的 char c沒有結尾的 0 不是合法的字串,所以結果不對 ...

c語言中輸出函式有哪些,C語言中,輸出函式有哪些?

美麗羊光 c語言輸入輸出函式有很多,標準i o函式中包含了如下幾個常用的函式 scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.int scanf const char f...