C語言中memcpy函式用法,求助,C語言中函式memset ,memcpy 和strchr 的功能和用法

2022-05-07 11:26:38 字數 5291 閱讀 6606

1樓:疾似雲流

visual c++把memcpy和memmove實現的一樣,即不用擔心覆蓋的問題,這個可以看vc安裝目錄裡的crt原始碼得知。

至於gcc,沒有看過glibc的原始碼。

求助,c語言中函式memset(),memcpy()和strchr()的功能和用法?

2樓:

memset函式用來對一段記憶體空間全部設定為某個字元,常用於記憶體空間初始化。將已開闢記憶體空間 s 的首 n 個位元組的值設為值 c 。

下面是一個例子

#include

#include

main()

c語言memcpy函式原型:extern void *memcpy(void *dest, void *src, unsigned int count);

用法:#include

功能:由src所指記憶體區域複製count個位元組到dest所指記憶體區域。

說明:src和dest所指記憶體區域不能重疊,函式返回指向dest的指標。

舉例:// memcpy.c

#include

#include

main()

函式 strchr()

功 能: 在一個串中查詢給定字元的第一個匹配之處\

用 法: char *strchr(char *str, char c);

程式例:

#include

#include

int main(void)

求助!c語言裡面的memcpy函式的用法

3樓:匿名使用者

pascal語言不會

不過意思就是把b陣列裡面的長度為b陣列大小的資料複製到a陣列裡面去實際效果應該等同於下面的**

void * memcpy(void * destination, const void * source, size_t num)

return destination;}

c語言中有關memcpy函式的問題

4樓:鬼火狼煙

由於d是char型別,如果按lz的寫法d[strlen(s)]='\0';是完全可以的,也是比較正規的寫法,而d[strlen(s)]=0是把0做了(char)隱式轉換後賦值給d,本質上沒有什麼不同('\0'的ascii碼值就是0),但是這樣的寫法很晦澀,不應該提倡.

5樓:

字串*s是以結束符'\0'為結束的,而strlen為字串的長度,但是不包括結束符。而printf函式中需要結束符,因此需要用d[strlen(s)]='\0』。可以在使用memcpy(d,s,strlen(s)+1).

6樓:

0和'\0'是相等的

0的asicc碼值就是0x00

7樓:

因為'\0' == 0

'\0'的asicc碼值就是0x00.一回事情

c語言,memcpy函式的作用,最好再給個小程式~

8樓:匿名使用者

函式名: memcpy

功 能: 從源source中拷貝n個位元組到目標destin中用 法: void *memcpy(void *destin, void *source, unsigned n);

程式例:

#include

#include

int main(void)

9樓:匿名使用者

char desc[20];

char src="abcdefg";

memcpy(desc,src,4);

desc="abcd";

長度4最好不要大於desc陣列的長度,如果大於就是記憶體溢位

10樓:匿名使用者

這個已經相當明白了啊,把src中的字串copy到dest中,再返回dest地址

c語言串拷貝(strcpy)和記憶體拷貝(memcpy)函式有什麼不同?

11樓:公枋

strcpy()函式只能拷貝字串。strcpy()函式將源字串的每個位元組拷貝到目錄字串中,當遇到字串末尾的null字元(\0)時,它會刪去該字元,並結束拷貝。

memcpy()函式可以拷貝任意型別的資料。因為並不是所有的資料都以null字元結束,所以你要為memcpy()函式指定要拷貝的位元組數。

在拷貝字串時,通常都使用strcpy()函式;在拷貝其它資料(例如結構)時,通常都使用memcpy()函式。以下是一個使用strcpy()函式和memcpy()函式的例子:

#include #include typedef struct cust-str custrec;void main (void);

void main (void){char * src_string = "this is the source string" ;

char dest_string[50];

custrec src_cust;

custrec dest_cust;

printf("hello! i'm going to copy src_string into dest_string!\n");

/ * copy src_ string into dest-string. notice that the destination

string is the first argument. notice also that the strcpy()

function returns a pointer to the destination string. * /

printf("done! dest_string is: %s\n" ,

strcpy(dest_string, src_string)) ;

printf("encore! let's copy one custrec to another. \n") ;

prinft("i'll copy src_cust into dest_cust. \n");

/ * first, intialize the src_cust data members. * /

src_cust. id = 1 ;

strcpy(src_cust. last_name, "strahan");

strcpy(src_cust. first_name, "troy");

/ * now, use the memcpy() function to copy the src-cust structure to

the dest_cust structure. notice that, just as with strcpy(), the

destination comes first. * /

c語言memcpy的一些問題

12樓:糖二灰

可能錯在了計算機儲存機制上,

在32位系統的計算機中,每次變數的儲存都是按以4的倍數位置開始的地址來儲存的,

也就是說你新建一個變數,不管它是什麼型別的,他都是從4的倍數位開始的。

雖然你這麼儲存是確實把內部東西都儲存進去了,但是根據計算機的編碼顯示原因,

你直接看編譯後產生的那些東西就是亂碼的,或者不符合你要求的。

你可以對照原始儲存進去的二進位制碼與原來的對比,應該是相同的。

而且int x=10; 這裡的int應該是4個位元組,writedata(&x,2);應該是writedata(&x,4);

13樓:匿名使用者

雖然不少書說int和char是相通的但實際上現在的形式是int是佔四個位元組,而char是佔1個位元組。memcpy是字串處理函式。所以你這樣直接用int的地址是錯誤的,int和char不是不可以通用。

只是一般很容易搞錯。一般通用的值恐怕只有0這個值了。因為0這個值,int四個位元組,四個字解32位都是0值就是0,而char一個位元組8為都是0才會是0,那麼char和int的就能行了。

但是即使是0很多人都會搞錯。

x是int型的,你要先把x的數值10轉換為字串「10」,所以寫一個增加一個字元陣列xx用來儲存x的值轉換為的字串,所以writelnint要改。寫法如下()

void writelnint(int i)同時,我writedata也要改

void writedata(char *data,int len)因為傳遞過來的len的長度是要複製的字元的個數,這包含了一個結束標誌,所以加的時候要減1,而且這要下一次連線之是就剛好是從結束標誌所在的位置開始(或者說下一次執行是的newpos就是這個結束標誌的位置)

完整的**在附件裡

這是執行結果

14樓:匿名使用者

你是如何看到資料沒有被追加到m_pdata裡的?

按你第二種意思的話, int型資料要轉為string型寫入才能有10abcd這種效果:

void writeint(int i)

;sprintf(tmp, "%d", i);

writedata(tmp,strlen(tmp));//如果你是按字串看m_pdata的,這裡就不是strlen(tmp)+1,否則要+1

}writestring也取決於你是按字串方式看的還是按記憶體長度直接單個字元打出來的。相應應該沒有「+1」和有「+1」

15樓:匿名使用者

void writedata(void *data,int len)上面這個函式只是為了能過多次呼叫writedata來把一些資料寫到m_pdata裡

比如這樣:

int x=10;

writedata(&x,2);

char *str="abcd";

writedata(str,5);

求教c語言memcpy函式第一個引數使用char*出錯,使用char[]就沒問題是什麼原因?

16樓:聽不清啊

問題不是由於char *而出現錯誤,而是因為,你的字元指標a指向的是一個只讀的記憶體空間。所以他不允許被改寫。反過來,如果是字元指標a指向是可使用的空間,比方說指向一個字元陣列,那麼要改寫它的內容就是可行的了。

例如,char s[30]="123",*a=s;

memcpy(a,"456",3);

這樣執行以後,陣列s中的內容就是456了。

C語言return函式的用法,c語言中的函式的return使用

這條語句一般情況下加在主函式的最後,表示程式執行正常,則返回一個整數值0。其實在windows下一般沒有這個要求,除非是一個程式呼叫另外一個程式,或者在unix和linux下系統會要求一個程式返回一個整數值。告訴你,return意思就是結束函式並返回值函式有兩種 一種是不返回值的,而另外一種則是返回...

C語言中函式呼叫問題,C語言中函式的呼叫

首先我們來說一下,你這個程式是有很大的問題的。函式有且只有唯一一個返回值,當程式執行到return的時候,這個函式就結束並返回了。所以,你這裡寫2個return來返回最大值和最小值是不可能的。再者,如果你想使用返回值作為最大值,最小值的傳遞,那麼在main函式中,你呼叫star函式的時候需要一個變數...

c語言中public 函式使用,c語言中public 是什麼意思啊?

c 中是有public的函式,可以在外面進行呼叫的。c語言中public 是什麼意思啊?public 定義一個全域性變數。全域性變數是程式設計術語中的一種,源自於變數之分。變數分為區域性與全域性,區域性變數又可稱之為內部變數。由某物件或某個函式所建立的變數通常都是區域性變數,只能被內部引用,而無法被...