當前位置:首頁 » 編程語言 » c語言手寫strcpy函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言手寫strcpy函數

發布時間: 2022-06-18 17:42:12

c語言中strcpy函數怎麼用看題

strcpy
將第二個拷貝到第一個
即拷完以後a為a2\0
注意每個字元串最後都有個\0
然後
strcat
後a就是"a2yz"
最終輸出結果為"a2yz"

Ⅱ C語言 strcpy函數

printf("%d\n",sizeof(s),strlen(s));
這句話錯誤,少了一個%d,sizeof也不應該分開寫。
strcpy(s,t);
是將字元數組t裡面的內容賦給字元數組s,
t[0]=X,t[1]=Y,t[2]=Z,t[3]="\0",當strcpy()函數執行完之後,字元數組s中的內容變為s[0]=X,s[1]=Y,s[2]=Z,s[3]="\0",s[4]=E,s[5]=F.
sizeof(s)的值是字元數組的大小即為20。
strlen(s)的值為「\0」之前的字元長度即為3.
printf("%c,%s\n",s[4],s);
當輸出字元數組s時,編譯器當碰到第一個「\0」後便停止輸出,所以s的輸出為:XYZ

Ⅲ C語言自己寫strcpy函數怎麼寫

#include <stdio.h>
#define LEN 1024
/* */
static void *memcpy(void *d, const void * s, size_t n);
static void *memmove(void *d, const void *s, size_t n);
static char *strcpy(char *d, const char *s);
static char *strncpy(char *d, const char *s, size_t n);
/* link */
static char *strcat(char *s1, const char *s2);
static char *strncat(char *s1, const char *s2, size_t n);
/* len*/
static size_t strlen(const char *s);
/* cmp */
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
int memcmp(const void *s1, const void *s2, size_t n);
/* find */
void *memchr(const void *s, int key_char, size_t n);
char *strchr(const char *s, int key_char);
char *strstr(const char *s, const char *key_str);
size_t strcspn(const char *s1, const char *s2);
size_t strspn(const char *s1, const char *s2);
char *strpbrk(const char *s1, const char *s2);
/* other */
char *strtok(char *s1, const char *s2);
void *memset(void *s, int c, size_t n);
int main(void)
{
char buf[LEN] ;
char *src = "world";
char *ss = "oucch";

printf("strlen -> src[len] = %d\n", strlen(src));
printf("memcpy ->%s\n", (char *)memcpy(buf, src, strlen(src) + 1));
printf("buf -> %s\n", buf);
printf("memmove->%s\n", (char *)memmove(buf + 3,buf, strlen(buf) + 1));
printf("buf -> %s\n", buf);
printf("strcpy -> %s\n", strcpy(buf, src));
printf("buf -> %s\n", buf);
printf("strncpy -> %s\n", strncpy(buf, ss, 1));
printf("buf -> %s\n", buf);
printf("strcat -> %s\n", strcat(buf, src));
printf("buf -> %s\n", buf);
printf("strncat-> %s\n", strncat(buf, src, 1));
printf("buf -> %s\n", buf);
printf("strcmp : %d\n", strcmp("123", "1234"));
printf("strncmp : %d\n", strncmp("123", "1234", 3));
printf("strncmp : %d\n", strncmp("123", "1234", 5));
printf("memcmp: %d\n", memcmp("123", "1235", 4));
printf("strcspn: %d\n" ,strcspn("wangtianqing", "ang"));

return 0;}
static void * memcpy(void *d, const void *s, size_t n)
{
char *d1;
const char *s1;

for(d1 = d, s1 = s; 0 < n; --n)
*d1++ = *s1++;
return (d);
}
static void *memmove(void *d, const void *s, size_t n)
{
char *d1;
const char *s1;

d1 = d;
s1 = s;
if (s1 < d1 && s1 < d1 + n)
for(s1 += n, d1 +=n; 0 < n; --n)
*--d1 = *--s1;
else
for(; 0 < n; --n)
*d1++ = *s1++;
return (d);
}
static char *strcpy(char *d, const char *s)
{
char *d1;
const char *s1;

for(d1 = d, s1 = s; (*d1++ = *s1++) != '\0';)
;
return (d);
}
static char *strncpy(char *d, const char *s, size_t n)
{
char *d1;
const char *s1;

for(d1 = d, s1 = s; 0 < n && *s1 != '\0'; --n) {
*d1++ = *s1++;
}
for(; 0 < n; --n)
*d1++ = '\0';
return (d);
}
static size_t strlen(const char *s)
{
const char *s1;

for(s1 = s; *s1 != '\0'; ++s1)
;
return (s1 - s);
}
static char *strcat(char *s1, const char *s2)
{
char *st1;
const char *st2;

for(st1 = s1 ; *st1 != '\0'; ++st1)
;
for(st2 = s2; (*st1++ = *st2++) != '\0';)
;
return (s1);
}
static char *strncat(char *s1, const char *s2, size_t n)
{
char *st1;
const char *st2;

for(st1 = s1; *st1 != '\0'; ++st1)
;
for(st2 = s2; 0 < n && (*st1++ = *st2++) != '\0'; --n)
;
return (s1);
}
int strcmp(const char *s1, const char *s2)
{
for(; *s1 == *s2; ++s1, ++s2)
if(*s1 == '\0')
return (0);
return ((*(unsigned char *) s1 < *(unsigned char *) s2 ) ? -1: +1);
}
int strncmp(const char *s1, const char *s2, size_t n)
{
for(; 0 < n && *s1 == *s2; ++s1, ++s2)
if( *s1 == '\0')
return (0);
return (*(unsigned char *) s1 > *(unsigned char *) s2 ? -1 : +1);
}
int memcmp(const void *s1, const void *s2, size_t n)
{
const unsigned char *st1;
const unsigned char *st2;

for(st1 = s1, st2 = s2; 0 < n; ++st1, ++st2, --n)
if( *st1 != *st2)
return (*st1 < *st2 ? -1 : +1);
return 0;
}
void *memchr(const void *s, int key_char, size_t n)
{
const unsigned char uc = key_char;
const unsigned char *us;

for( us = s; 0 < n; --n, ++us)
if( uc == *us)
return ((void *)us);
return (NULL);
}
char *strchr(const char *s, int key)
{
const char *s1 = s;

for(; *s1 != '\0'; ++s1)
if(*s1 == key)
return ((char *)s1);
return (NULL);
}

size_t strcspn(const char *s1, const char *s2)
{
const char *sc1, *sc2;

for(sc1 = s1; *sc1 != '\0'; ++sc1)
for(sc2 = s2; *sc2 != '\0'; ++sc2)
if(*sc1 == *sc2)
return (sc1 - s1);
return (sc1 - s1);
}
size_t strspn(const char *s1, const char *s2)
{
const char *sc1;
const char *sc2;

for(sc1 = s1; *sc1 != '\0'; ++sc1) {
for(sc2 = s2; *sc2 != '\0'; ++sc2)
if(*sc1 == *sc2)
break;
if(*sc2 == '\0')
return (sc1 - s1);
}
return (sc1 - s1);
}
char *strpbrk(const char *s1, const char *s2)
{
const char *sc1, *sc2;

for( sc1 = s1; *sc1 != '\0'; ++sc1)
for( sc2 = s2; *sc2 != '\0'; ++sc2)
if (*sc1 == *sc2)
return ((char *)sc1);
return (NULL);
}
char *strstr(const char *s, const char *key_str)
{
if (*key_str == '\0')
return ((char *) s);
for(; (s = strchr(s, *key_str)) != NULL; ++s) {
const char *sc1, *sc2;

for (sc1 = s, sc2 = key_str; ;) {
if( *++sc2 == '\0')
return ((char *)s);
else if( *++sc1 != *sc2)
break;
}

}
return (NULL);
}
char *strtok(char *s1, const char *s2)
{
char *sbegin, *send;
static char *ssave = "";

sbegin = s1 ? s1 : ssave;
sbegin += strspn(sbegin, s2);
if( *sbegin == '\0') {
ssave = "";
return (NULL);
}
send = sbegin + strcspn(sbegin, s2);
if( *send != '\0')
*send++ = '\0';
ssave = send;
return sbegin;
}
void *memset(void *s, int c, size_t n)
{
const unsigned char uc = c;
unsigned char *su;

for( su = s; 0 < n; ++su, --n)
*su = uc;
return (s);
}

所有的函數原型都在這了 你想要哪個都行
謝謝採納

Ⅳ c語言中的strcpy是什麼意思

c語言中strcpy是一個C語言的標准庫函數,是string (字元串復制)的縮寫。strcpy函數的作用是把含有\0結束符的字元串復制到另一個地址空間,返回值的類型為char*。


C語言是一門面向過程的計算機編程語言,與C++、Java等面向對象編程語言有所不同。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言描述問題比匯編語言迅速、工作量小、可讀性好、易於調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編語言代碼生成的目標程序效率低10%至20%。因此,C語言可以編寫系統軟體。當前階段,在編程領域中,C語言的運用非常之多,它兼顧了高級語言和匯編語言的優點,相較於其它編程語言具有較大優勢。計算機系統設計以及應用程序編寫是C語言應用的兩大領域。同時,C語言的普適較強,在許多計算機操作系統中都能夠得到適用,且效率顯著。

Ⅳ c語言 strcpy 函數的使用

1、strcpy函數是復制字元串的,接受兩個參數,一個是被復制字元串,另一個新字元串。具體的用法,首先打開編輯器新建一個c語言的程序文件,寫入頭文件和主函數:

Ⅵ c語言中的strcpy什麼意思,簡單點解釋

strcpy是一個C語言的標准庫函數,是string (字元串復制)的縮寫。strcpy函數的作用是把含有''結束符的字元串復制到另一個地址空間,返回值的類型為char*。

(6)c語言手寫strcpy函數擴展閱讀:

C語言中,strcpy 函數不對數組邊界進行檢查,因而在使用 strcpy 函數時,應注意以下兩點:

一、strcpy函數的緩沖區溢出問題

C 庫函數 char *strcpy(char *dest, const char *src) 把 src 所指向的字元串復制到 dest。需要注意的是如果目標數組 dest 不夠大,而源字元串的長度又太長,可能會造成緩沖溢出的情況。

二、strcpy函數的安全機制

在編寫 strcpy 函數時,首先盡量使目的緩沖區長度足夠長,另外要檢測目的緩沖區和源緩沖區。如果目的緩沖區或源緩沖區是空,就要在異常處理中結束程序。如果源字元串比目的緩沖區長度不長,也要在異常處理中結束程序,以防止出現溢出情況。

Ⅶ C語言 寫個strcpyh函數

#include <stdio.h>
#include <string.h>
char* StrCpy(char *strDest, const char *strSrc)
{
if(!strDest||!strSrc)
return NULL;
if (!strlen(strSrc))
{
*strDest='\0';
return strDest;
}
char* tmp=strDest;
do
{
*tmp++=*strSrc;
} while (*strSrc++);
return strDest;
}
int main()
{
char str1[20],str2[20];
scanf("%s",str2);
printf("%s\n",StrCpy(str1,str2));//這一行就說明了返回char*的作用
return 0;
}

Ⅷ c語言中strcpy函數干什麼用的

他是字元串的復制,函數strcpy(字元數組1,字元串2)作用就是 將字元串2復制到字元數組1 中去。

例如 char str1[10]='',

str2[]={「china」}

strcpy(str1,str2);

這樣str1[]數組的內容就是「china」。

(8)c語言手寫strcpy函數擴展閱讀:

C語言庫函數,常用庫函數有:

1、scanf格式輸入函數

2、printf格式輸出函數

3、systemdos命令函數

4、sort排序

5、main主函數

6、fgets文件讀取字元串函數

7、fputs文件寫入字元串函數

8、fscanf文件格式讀取函數

9、fprintf文件格式寫入函數

10、fopen打開文件函數

11、getchar輸入字元函數

12、putchar輸出字元函數

13、malloc動態申請內存函數

Ⅸ 關於C語言strcpy函數

strcpy(p1,p1++)意思就是將以p1+1地址開頭的字元串賦給p1,這樣的話p1這個位置的字元就被擠出去了。
後面p1--是因此現在p1指向的是原來p1+1的位置,還沒有經過判斷,如果沒有這一句,循環後p1++,這個位置就跳過了。