標籤:des style blog http io ar for 2014 div
驗證大小端儲存 :
int main(){int a = 0x12345678;char *p = (char *)&a;printf("%x\n", *p); // 78 表示這是小端儲存return 0;}
字元數組:
char name[] = { ‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘ };//錯誤的 因為後面沒有\0char name[] = "liuwei";
char name[100] = {‘h‘,‘e‘,‘l‘,‘l‘,‘o‘};char name[100] = { "hello" };char name[100] = "hello";
字串也可以這樣:char *p = "hello world";printf("%s",p); //hello world p指向字串首地址,但是一直取到 \0 為止
和字元數組的區別:
char *str = "hello"; //str只有四個位元組,儲存的只是hello的首地址,而hello存在 代碼區*str = ‘H‘; //這種是錯誤的
char str[] = "hello"; // hello存在棧區*str = ‘H‘; //輸入Hello
擷取一個字串的長度,自己實現strlen:
int str_len(char * p){int len = 0;while (*p++) // 相當於while(*p++ != ‘\0‘) len++;return len;}int main(){char a[100];gets(a);printf("%d\n", strlen(a));return 0;}
strlen sizeof區別 ://strlen函數在 <string.h>中
char str[100];gets(str); //假設輸入 helloprintf("%d",strlen(str)); //5 字串有效長度printf("%d",sizeof(str)); //100 整個字串數組有多大
strcpy :char src[100];char dest[100];gets[src];strcpy(dest,src); //dest裡面就有了src的值了,都是char *類型 //把src拷貝到dest 這個函數的傳回值也是 dest
其他字串函數:strcmp 以字典序比較兩個字串大小strcat 兩個字元相串連
strchr (char * s,int c) 在字串s尋找c 如果有,返回c的地址,否則返回null printf列印的話 是c後面的字串
hello , e // printf ---> ello
strstr (char *,char * ) 在字串中找子串,找到返回位置的地址,否則返回null //和strchr極其相似 只是字元和字串的區別
strtok(char * str,char * delim) :
#include <stdio.h>#include <string.h>int main(){ char str[] = "hello world ni hao"; char * p = strtok(str," "); while( p != NULL) { printf("%s\n",p); p = strtok(NULL , " "); } return 0;}
另外一種寫法
for(p = strtok( buf , " "); p != NULL ; p = strtok(NULL , "")) { printf("%s\n",p); }
memset ://函數在 <string.h>中
#include <stdio.h>#include <string.h>int main(){ char s[3]; memset(s,‘A‘,sizeof(s)); //會把s指標前sizeof(s)個位元組以參數‘A‘填入 s[3] = ‘\0‘; printf("%s\n",s); //AAA return 0;}
來自為知筆記(Wiz)
7.28 指標 字串 字串庫函數