1. 程式人生 > 其它 >在實際應用中聯合體union的妙用

在實際應用中聯合體union的妙用

1.strlen與sizeof(返回字串的長度,不包括結尾的0)   size_t strlen(const char *s)

#include <stdio.h>
int getLength(char *s)
{
    int cnt = 0;
    while (s[cnt] != '\0') {
        cnt++;
    }
    return cnt;
}
int main()
{
    char line[] = "Hello";
    printf("getLength=%lu\n",getLength(line));
    printf("strlen=%lu\n
",strlen(line));// 不算結尾的0的長度,,如果要寫在函式裡呢,就是不傳陣列長度進去的時候 printf("sizeof=%lu\n",sizeof(line));// 算結尾的0的長度 return 0; }

2.strcmp比較兩個字串,則是不可能修改字串,所以是const修飾字符串,比較記憶體的內容

#include <stdio.h>

int main()
{
    char s1[] = "Hello";
    char *s2 = "Hello";//證明陣列和指標是一樣的
    printf("%d\n",strcmp(s1,s2));//結果是0
printf("%p %p\n",s1,s2);//000000000061FE12 0000000000404000 但是指標所指向的地方不一樣呀 return 0; }

3.strcpy(拷貝功能)------char* strcpy(char *restrict dst,const char * restrict src)   restrict表示不能有重疊的部分

常規操作:char *dst = (char*)malloc(strlen(src)+1)//strlen只是內容,因此+1獲得記憶體長度,先申請出一塊空間

       strcpy(dst,src);//再拷貝

#include <stdio.h>
char
*mycpy(char *dst,char *src) { int idx = 0; while (src[idx]) { dst[idx]=src[idx]; idx++; } dst[idx] = '\0'; // char *ret = dst;//第二種方法:指標方法 // while (*src != '\0') { // *dst++ = *src++; // } // *dst = '\0'; return dst; } int main() { char s1[]="abc"; char s2[]="abc"; char s3[10]; //strcpy(s3,s2); mycpy(s3,s2); printf("%s",s3); }

4.strchr(查詢功能)--------strchr(s,'l'),可以從左邊找也可以從右邊找

#include <stdio.h>

int main()
{
    char s[]="hello";
    char *p = strchr(s,'l');
    p = strchr(p+1,'l');
    printf("%p\n",p);
    printf("%s\n",p);
}

上面打印出來的是找到字元後面的列印

下面是列印的是找到字元前面的列印,,這些返回值的意思就是char型指標

查詢字串中的字串:char *strstr(const char *s1,const char *s2)

大小寫不敏感的查詢字串:char *strstr(const char *s1,const char *s2)