指针 字符串 字符串库函数
验证大小端存储 :
int main()
{
int a = 0x12345678;
char *p = (char *)&a;
printf("%x\n", *p); // 78 表示这是小端存储
return 0;
}
字符数组:
char name[] = { 'h', 'e', 'l', 'l', 'o' };//错误的 因为后面没有\0
char 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); //假设输入 hello
printf("%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;
}