日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验

發布時間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

建議大家多看msdn,下面的有的函數說明有的地方有錯誤,不管是誰寫的,都不能保證沒有錯誤,需要提醒大家,在看書的時候要保持懷疑的態度,兼容并包,要親手試試,才能將書本的知識轉化為自己的東西。

strcpy與strncpy函數

(1) Memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#include <string.h>
功能:把buffer所指內存區域的前count個字節設置成字符c。
說明:返回指向buffer的指針。用來對一段內存空間全部設置為某個字符
例:char a[10];memset(a, '/0', sizeof(a));
memset可以方便的清空一個結構類型的變量或數組。
如:
struct _test
{
char s[10];
int x;
int y;
};
變量
struct _test?? st;
(1)一般清空st的方法如下:
st.s[0] = '/0';
st.x???? = 0;
st.y????? = 0;
(2) 用memset方法如下:
memset(&st,0,sizeof(struct _test));
數組:
struct _test?? st[10];
則用??? memset(st,0,sizeof(struct _test)*10);


(2)memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指內存區域復制count個字節到dest所指內存區域。
說明:src和dest所指內存區域不能重疊,函數返回指向dest的指針。
可以拿它拷貝任何數據類型的對象。


例:char a[10],b[5];
memcpy(b, a, sizeof(b));
/*注意如果用sizeof(a),會造成b的內存地址溢出*/
(3) Strcpy??
原型:extern char *strcpy(char *dest,char *src);
用法:#include <string.h>
功能:把src所指由NULL結束的字符串復制到dest所指的數組中。
說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。返回指向dest的指針。

????? 例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串長度(第一個‘/0’之前)是否超過50位,如超過,則會造成b的內存地址溢出

(4) 三者區別??
memset?? 主要應用是初始化某個內存空間。
memcpy?? 是用于copy源空間的數據到目的空間中。
strcpy?????? 用于字符串copy,遇到‘/0’,將結束。
如果理解了這些,就能知道它們的區別:
例如初始化某塊空間的時候,用到memcpy,那么就顯得很笨拙了。
int m[100]
memset((void*)m,0x00,sizeof(int)*100);?????????? //Ok!
memcpy((void*)m,"/0/0/0/0....",sizeof(int)*100); //Not Ok!

?

Strcpy和Strncpy的區別- -
第一種情況:
char* p="how are you ?";
char name[20]="ABCDEFGHIJKLMNOPQRS";


strcpy(name,p); //name改變為"how are you ? OPQRS " ====>錯誤!
strncpy(name,p,sizeof(name)) //name改變為"how are you ? " ====>正確!

第二種情況:
char* p="how are you ?";
char name[20];

strcpy(name,p); //name改變為"how are you ? 未知字符 " ====>錯誤!
name[sizeof(name)-1]='/0' //和上一步組合,得到正確的結果!
strncpy(name,p,sizeof(name)); //name改變為"how are you ? " ====>正確!

第三種情況:
char* p="how are you ?";
char name[10];

strcpy(name,p); //name改變為"how are yo" ====>無結束符'/0',錯誤!
name[sizeof(name)-1]='/0' //和上一步組合,彌補結果。但要注意,字符傳遞錯誤!
strncpy(name,p,sizeof(name)); //和單純的一步strcpy結果一樣!

================================================
總結:strcpy
如果源長>目標長,則將源長中等于目標長的字符拷貝到目標字符串
如果源長<目標長,則源長全部拷貝到目標字符串,不包括'/0'
strncpy
如果目標長>指定長>源長,則將源長全部拷貝到目標長,自動加上'/0'
如果指定長<源長,則將源長中按指定長度拷貝到目標字符串,不包括'/0'
如果指定長>目標長,error happen!

strncpy(sptsf_cert.peer_ditm_no,clr_total.payint_acc+7,8) //從第8位后8位拷貝
strncpy(sptsf_cert.recv_inst,clr_total.payint_acc,4);//拷貝前四位
為了您的安全,請只打開來源可靠的網址

打開網站????取消

來自: http://hi.baidu.com/wenleiworld/blog/item/175e072ad002aef0e6cd4033.html

總結

以上是生活随笔為你收集整理的从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。