strcpy
原型:extern char *strcpy(char *dest,char *src);
用法:#include <string.h>
功能:把src所指由NULL結束的字符串複製到dest所指的數組中。
說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
返回指向dest的指針。
char *strcpy(char*des,const char*src)
{
if((des==NULL)||(src==NULL))
throw "Invalid arguments";
char *temp=des;
while((*des++=*src++)!='\0');
return temp;
}
採用strcpy時要確保des的空間足夠大。
strncpy
原型:char * strncpy( char *dest, char *src, size_t num );
用法:#include <string.h>
功能:(c/c++)複製src中的內容(字符,數字、漢字....)到dest,複製多少由num的值決定,返回指向dest的指針。如果遇到null字符('\0'),且還沒有到num個字符時,就用(num - n)(n是遇到null字符前已經有的非null字符個數)個null字符附加到destination。注意:並不是添加到destination的最後,而是緊跟着由source中複製而來的字符後面。
說明:1.如果n > dest串長度,dest棧空間溢出產生崩潰異常
2.
sprintf
語法:
#include <stdio.h> int sprintf( char *buffer, const char *format, ... );
|
sprintf()函數和printf()類似,格式控制完全一樣,只要是printf使用的格式化字符串,在sprintf都可以使用,只是把輸出發送到buffer(緩衝區)中。返回值是寫入的字符數量。
功能一:格式化數字字符串
sprintf(s, "%-8X", 12345); //s變成:“12345 ”
大寫的“X”代表,16進制大寫形式,寬度佔8 個位置,“-”代表左對齊 。
功能二:控制浮點數打印格式
浮點數使用格式符”%f”控制,默認保留小數點後6 位數字 %m.nf”格式,其中m 表示打印的寬度,n 表示小數點後的位數
sprintf(s, "%10.3f", 3.1415626); //s變成:" 3.142"
功能三:連接兩個字符串
直接連接:
char dest[256];
char src1[] = {'a','b','c','d','e'};
char src2[] ={'1','2','3','4'};s
printf(dest,"%.5s%.4s",src1,src2); //output:“abcde1234”
截取字符串的某一些字符進行連接,
char dest[256];
char src1[] = {'a','b','c','d','e'};
char src2[] ={'1','2','3','4'};
sprintf(dest,"%.*s%.*s",2,src1,3,src2); //output:“ab123”
功能四:字符/Ascii 碼對照
我們知道,使用”%d”或者”%x”打印一個字符,便能得出它的10 進制或16 進制的ASCII 碼;反過來,使用”%c”打印一個整數,便可以看到它所對應的ASCII 字符。以下程序段把所有可見字符的ASCII 碼對照表打印到屏幕上(這裏採用printf,注意”#”與”%X”合用時自動爲16 進制數增加”0X”前綴):
for(int i = 32; i < 127; i++) {
printf("[ %c ]: %3d 0x%#04X\n", i, i, i);
}
功能五:打印地址信息
有時調試程序時,我們可能想查看某些變量或者成員的地址,由於地址或者指針也不過是個32 位的數,你完全可以使用打印無符號整數的”%u”把他們打印出來:
sprintf(s, "%u", &i);
不過通常人們還是喜歡使用16 進制而不是10 進制來顯示一個地址:
sprintf(s, "%08X", &i);
然而,這些都是間接的方法,對於地址打印,sprintf 提供了專門的”%p”:
sprintf(s, "%p", &i);
我覺得它實際上就相當於:
sprintf(s, "%0*x", 2 * sizeof(void *), &i);
功能六:利用返回值
printf與sprintf的返回值是寫入的字符數量。
也就是說每當一次sprinf 調用結束以後,你無須再調用一次strlen 便已經知道了結果字符串的長度。如:
int len = sprintf(s, "%d", i);