字符串
#include <stdio.h>
int main()
{
int data[] = {1,2,3,4,5};
char cdata[] = {'h','e','l','l','o'};
char cdata2[] = "hello";
char *pchar = "hello";//字符串常量,不允许被修改
char c = 'c';
char *p;//野指针,并没有明确的内存指向
*p= 'a';
cdata2[3] = 'm';
printf("%s",cdata2);
putchar('\n');
puts(cdata2);
*pchar = 'm';
puts("end");
/*
int i;
for(i=0;i<5;i++){
printf("%c",*(pchar+i));
}*/
return 0;
}
字符串存放方式及结束标志
#include <stdio.h>
#include <string.h>
//strcpy strcmp strcat strstr
int main()
{
//字符串和字符数组的区别;
int data[] = {1,2,3,4,5};
//请计算数组data的元素个数
char cdata[6] = {'h','e','l','l','o'};//字符串的结束标志'\0'
char cdata2[] = "hello";
int len = sizeof(data)/sizeof(data[0]);
printf("len = %d\n",len);
len = sizeof(cdata2)/sizeof(cdata2[0]);
printf("len = %d\n",len);
len = sizeof(cdata)/sizeof(cdata[0]);
printf("len = %d\n",len);
printf("%s\n",cdata);
return 0;
}
sizeof & strlen 的区别
#include <stdio.h>
#include <string.h>
void test()
{
}
//strcpy strcmp strcat strstr
int main()
{
char cdata[128] = "hello";//'\0'
void (*ptest)();
ptest = test;
printf("sizeof :%d\n",sizeof(cdata));
printf("strlen: %d\n",strlen(cdata));
char *p = "hello";
//p是一个char *,sizeof来计算的时候,得出是计算机用多少字节来表示一个地址
printf("sizeof:p :%d\n",sizeof(p));
printf("sizeof:char* :%d\n",sizeof(char *)); //地址
printf("sizeof:int* :%d\n",sizeof(int *)); //地址
printf("sizeof:char :%d\n",sizeof(char));
printf("sizeof:ptest :%d\n",sizeof(ptest));
printf("strlen :%d\n",strlen(p));
return 0;
}
malloc开辟动态空间
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//char *strcpy(char* dest, const char *src);
int main()
{
char *p;//野指针
p = (char *)malloc(1);//p有了具体的内存指向
*p = 'c';
free(p);//动态开辟后重新指向,记得释放。不然存在内存泄露的风险
p = NULL; //free之后让指针指向NULL,防止悬挂指针
p = (char *)malloc(12); //开辟12字节的内存空间
if(p == NULL){ //通常养成习惯对malloc返回值做NULL判断,申请失败了
printf("malloc error\n");
exit(-1);
}
memset(p,'\0',12); //内存空间初始化
printf("扩容地址:%x\n",p);
int len = strlen("chenlichen2342354364575467");
int newLen = len - 12 + 1; // 1:为'\0'
p = realloc(p,newLen); //扩容
printf("扩容后地址:%x\n",p);
strcpy(p,"chenlichen2342354364575467");
puts(p);
puts("end");
return 0;
}
strcpy函数(拷贝)
#include <stdio.h>
#include <string.h>
int main()
{
char *p = "chuanzuozhongxin";
char str[128] = {'\0'};
puts(p);
printf("%s\n",p);
puts("请输入字符串");
//scanf("%s",str);
//gets(str);
//strcpy(str,p);
strncpy(str,p,6); //sgtrcpy(目标文件,源文件,拷贝字符大小)
puts(str);
return 0;
}
实现字符拷贝
#include <stdio.h>
char *mystrcpy(char *des,char *src)
{
if(des == NULL || src == NULL){
return NULL;
}
char *bak = des;
while((*des++ = *src++) != '\0');
des = '\0';
return bak;
}
char *mystrncpy(char *des,char *src,int count)
{
if(des == NULL || src == NULL){
return NULL;
}
char *bak = des;
while((*des++ = *src++) != '\0' && count > 0){ //while(*src )
//*des++ = *src++;
//printf("%d\n",count);
count--;
}
if(count > 0){
*des++ = '\0';
}
des = '\0';
return bak;
}
int main()
{
char *p = "zifuchuankaobei";
char des[128] = {'\0'};
// mystrcpy(des,p);
//puts(des);
mystrncpy(des,p,7);
puts(des);
return 0;
}
assert断言函数
#include <stdio.h>
#include <assert.h>
char *mystrcpy(char *des,char *src)
{
assert(des != NULL && src != NULL); //assert断言
char *bak = des;
while((*des++ = *src++) != '\0');
des = '\0';
return bak;
}
char *mystrncpy(char *des,char *src,int count)
{
if(des == NULL || src == NULL){
return NULL;
}
char *bak = des;
while((*des++ = *src++) != '\0' && count > 0){ //while(*src )
//*des++ = *src++;
//printf("%d\n",count);
count--;
}
if(count > 0){
*des++ = '\0';
}
des = '\0';
return bak;
}
int main()
{
char *p = "zifuchuankaobei";
char des[128] = {'\0'};
// mystrcpy(des,p);
//puts(des);
mystrncpy(des,p,7);
puts(des);
return 0;
}
strcat(拼接)
#include <stdio.h>
#include <string.h>
char *mystrcat(char *des,char *src)
{
char *back = des;
for(;*des =='\0';des++);
while((*des++ = *src++) != '\0');
*des = '\0';
return back;
}
int main()
{
char p[128] = "666"; //注意目标文件内存空间问题
char *p2 = "888";
strcat(p,p2);
puts(p);
return 0;
}
stecmp(比较)
#include <stdio.h>
#include <string.h>
int mystrcmp(char *str1,char *str2)
{
int ret = 0;
int n_str1 = 0;
int n_str2 = 0;
char *nstr1 = str1;
char *nstr2 = str2;
while(*str1 ){
n_str1 += *str1;
str1++;
}
while(*str2){
n_str2 += *str2;
str2++;
}
str1 = nstr1;
str2 = nstr2;
while(*str1 && *str2 && (*str1 == *str2)){
str1++;
str2++;
}
ret = n_str1 - n_str2;
if(ret > 0){
ret = 1;
}
if(ret < 0){
ret = -1;
}
return ret;
}
int main()
{
int ret;
char *p = "abcd";
char *p2 = "abdce";
ret = mystrcmp(p,p2);
//ret = strcmp(p,p2);
printf("ret = %d\n",ret);
return 0;
}