你這樣做是調(diào)用函數(shù)了,雖然用的是memcpy函數(shù),但也是函數(shù)。
綦江網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
不調(diào)用函數(shù)的做法,是使用循環(huán),逐字符復(fù)制,直到字符串結(jié)束符'\0'。
void?nofunc(char?*src,?char?*dest)
{
int?i;
for?(i=0;?src[i]?!=?'\0';?i++)
dest[i]?=?src[i];
dest[i]?=?'\0';
}
調(diào)用函數(shù)的做法,是使用strcpy()函數(shù),而不是使用memcpy。
strcpy(dest,?src);
這倆的區(qū)別在于,strcpy會把字符串結(jié)束符'\0'復(fù)制過來,而memcpy則不會判斷是否結(jié)束,而是按指定的長度來復(fù)制。如果使用memcpy,你復(fù)制的長度必須是strlen+1才行。你這個程序,如果目的字符串不是剛剛好與源字符串長度相等的話,就能看出有錯誤。
char?*src?=?"abc";
char?dest[100];
strcpy(dest,?"123");?/*?目的字符串剛好也是3個字符?*/
memcpy(dest,?src,?strlen(src));
printf("[%s]\n",?dest);??/*?如果這樣調(diào)用,結(jié)果是正常的,剛好是abc?*/
strcpy(dest,?"12345");
memcpy(dest,?src,?strlen(src));
printf("[%s]\n",?dest);??/*?如果這樣調(diào)用,結(jié)果是錯誤的,應(yīng)該是abc45?*/
/*?而使用strcpy就不會有問題?*/
strcpy(dest,?"12345");
strcpy(dest,?src);
printf("[%s]\n",?dest);??/*?這樣調(diào)用結(jié)果就是正確的abc?*/
gfedcba
f是一個交換函數(shù)
p=str+strlen(str)/2+1;
p就指向了 str+4 就是 e
p-2 指向 c
f的效果就是
從e開始直到g
和前面的c到a互換
函數(shù)里面定義的變量只能在這個函數(shù)內(nèi)部使用……因此main函數(shù)定義的 l 和s不能在count里面用……
你聲明的string是一個只能被讀取但不能被修改的字符串常量,你的程序沒有錯誤,但你應(yīng)該這樣改動,char string[100];這樣的話,你的Clean就沒有問題了,不過建議把空格替換成'\0',這樣能避免很多問題。
返回字符串的函數(shù)的思路:
1,在函數(shù)內(nèi)建立一個字符數(shù)組Temp
2,按位為字符數(shù)組Temp賦值
3,返回Temp的首地址
4,在主函數(shù)中將Temp的值復(fù)制給一個數(shù)組。
string.h頭文件中包含的字符串函數(shù)
void?*memcpy(void?*dest,?const?void?*src,?size_t?n);//將n字節(jié)長的內(nèi)容從一個內(nèi)存地址復(fù)制到另一個地址;如果兩個地址存在重疊,則最終行為未定義
void?*memmove(void?*dest,?const?void?*src,?size_t?n);//將n字節(jié)長的內(nèi)容從一個內(nèi)存地址復(fù)制到另一個地址;與memcpy不同的是它可以正確作用于兩個存在重疊的地址
void?*memchr(const?void?*s,?char?c,?size_t?n);//在從s開始的n個字節(jié)內(nèi)查找c第一次出現(xiàn)的地址并返回,若未找到則返回NULL
int?memcmp(const?void?*s1,?const?void?*s2,?size_t?n);//對從兩個內(nèi)存地址開始的n個字符進行比較
void?*memset(void?*,?int,?size_t);//用某種字節(jié)內(nèi)容覆寫一段內(nèi)存空間
char?*strcat(char?*dest,?const?char?*src);//在字符串dest之后連接上src
char?*strncat(char?*dest,?const?char?*src,?size_t?n);//從src截取n個字符連接在字符串dest之后,返回dest字符串
char?*strchr(const?char*?str,?int?ch);//從字符串str頭開始查找字符ch首次出現(xiàn)的位置
char?*strrchr(const?char*?str,int?ch);//從字符串str尾開始查找字符ch首次出現(xiàn)的位置
int?strcmp(const?char?*,?const?char?*);//基于字典順序比較兩個字符串
int?strncmp(const?char?*,?const?char?*,?size_t);//基于字典順序比較兩個字符串,最多比較n個字節(jié)
int?strcoll(const?char?*,?const?char?*);//基于當(dāng)前區(qū)域設(shè)置的字符順序比較兩個字符串
char?*strcpy(char*?str1,?const?char*?str2);//將str2拷貝給str1
char?*strncpy(char*?str1,?const?char*?str2,?size_t?n);//截取str2的n個字符拷貝給str1
char?*strerror(int);//返回錯誤碼對應(yīng)的解釋字符串,參見errno.h(非線程安全函數(shù))
size_t?strlen(const?char?*);//返回一個字符串的長度
size_t?strspn(const?char?*s,?const?char?*strCharSet);//從字符串s的起始處開始,尋找第一個不出現(xiàn)在strCharSet中的字符,返回其位置索引值。換句話說,返回從字符串s的起始位置的完全由strCharSet中的字符構(gòu)成的子串的最大長度。strspn為string?span的縮寫。不支持多字節(jié)字符集。
size_t?strcspn(const?char?*s,?const?char?*strCharSet);//從字符串s的起始處開始,尋找第一個出現(xiàn)在strCharSet中的字符,返回其位置索引值。換句話說,返回從字符串s的起始位置的完全由不屬于strCharSet中的字符構(gòu)成的子串的最大長度。strcspn為string?complement?span的縮寫。不支持多字節(jié)字符集。
char?*strpbrk(const?char?*s,?const?char?*strCharSet);//在字符串s中查找strCharSet中任意字符第一次出現(xiàn)的位置的指針值。strpbrk為string?pointer?break縮寫。不支持多字節(jié)字符集。
char?*strstr(const?char?*haystack,?const?char?*needle);//在字符串haystack中查找字符串needle第一次出現(xiàn)的位置,heystack的長度必須長于needle
char?*strtok(char?*strToken,?const?char?*strDelimit?);//將一個字符串strToken依據(jù)分界符(delimiter)分隔成一系列字符串。此函數(shù)非線程安全,且不可重入;但MSVC實現(xiàn)時使用了thread-local?static?variable因而是線程安全的單仍然是不可重入,即在單線程中不能對兩個源字符串交替調(diào)用該函數(shù)來分析token,應(yīng)當(dāng)對一個字符串分析完成后再處理別的字符串。
size_t?strxfrm(char?*dest,?const?char?*src,?size_t?n);//根據(jù)當(dāng)前l(fā)ocale轉(zhuǎn)換一個字符串為strcmp使用的內(nèi)部格式
1,樓上說得正確
printf("輸出文本文件:");
// 這句后面增加:
while ((c=getchar())!='\n' c!=EOF );
//目的是清空輸入緩沖區(qū)。
2,加密算法是正確的
int op,i;
char c,outcome[30];
printf("請輸入操作要求:(0為加密,!0為解密):\n");
scanf("%d",op);
printf("請輸入文本文件:\n");
i=0;
printf("輸出文本文件:");
while ((c=getchar())!='\n' c!=EOF );
while((c=getchar())!='\n')
{
if(op)
outcome[i]=decrpt(c);
else
outcome[i]=encrpt(c);
printf("%c",outcome[i]);
i++;
}
printf("\n");
//while((c=getchar())!='\n')
char a[27] = "abcdefghijklmnopqrstuvwxyz";
char A[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for(int i = 0; i 27; i++)
{
printf("the old char is [%c]", a[i]);
printf("--- the encrpt char is [%c] \n", encrpt(a[i]));
}
for(int i = 0; i 27; i++)
{
printf("the old char is [%c]", A[i]);
printf("--- the encrpt char is [%c] \n", encrpt(A[i]));
}
printf("\n");
getchar();
網(wǎng)頁名稱:C語言函數(shù)調(diào)字符串 c語言里字符串函數(shù)
鏈接分享:http://aaarwkj.com/article44/hhhche.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、用戶體驗、、微信公眾號、網(wǎng)站制作、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)