设为首页 加入收藏

TOP

C字符串相关知识总结(一)
2017-04-21 10:23:17 】 浏览:381
Tags:字符串 相关 知识 总结

字符串在攻击语言(如C#/Java)中的操作是相当的简单的,但是无奈C是爷爷辈的,对字符串操作都是比较困难的(实际上高级语言也是封装了一些操作)。所以有必要写一篇关于C的字符串相关的总结。


首先上代码:


#include <stdio.h>
#include <stdlib.h>
int main()
{
    system("color 1A");
    char names1[] = {'A','o','n','a','u','f','l','y','\0'};
    char names2[] = "Aonaufly";
    printf("names1 的值为 : %s\n" , names1);
    printf("names2 的值为 : %s\n" , names2);
    return 0;
}


执行的结果为:

从执行的想过来看
char names1[] = {'A','o','n','a','u','f','l','y','\0'};    /    char names2[] = "Aonaufly";
申明字符串的效果是一样的。也可以得出结论:
①,字符串和字符数组的区别是后面是否有\0。
②,字符串的最后一个字符永远是\0,占一个字节。注意(中文占2个字节,英文占一个字节)。
如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    system("color 1A");
    char names1[] = {'A','o','n','a','u','f','l','y','\0'};
    char names2[] = "Aonaufly";
    printf("names1 的值为 : %s\n" , names1);
    printf("names2 的值为 : %s\n" , names2);
    printf("names1 的长度 : %d\n" , sizeof(names1)/sizeof(char));
    printf("names2 的长度 : %d\n" , sizeof(names2)/sizeof(char));
    return 0;
}


执行结果:



\0在C的字符串中只是一个不得不用的占位符。
我再次拓展下中文情况 , 代码如下:
1234567891011121314151617 #include <stdio.h>
#include <stdlib.h>
int main()
{
    system("color 1A");
    char names1[] = {'A','o','n','a','u','f','l','y','\0'};
    char names2[] = "Aonaufly";
    printf("names1 的值为 : %s\n" , names1);
    printf("names2 的值为 : %s\n" , names2);
    printf("names1 的长度 : %d\n" , sizeof(names1)/sizeof(char));
    printf("names2 的长度 : %d\n" , sizeof(names2)/sizeof(char));
    printf("************************************************************\n");
    char chinese[] = "我是谁?";
    printf("chinese 的值为 : %s\n" , chinese);
    printf("chinese 的长度 : %d\n" , sizeof(chinese)/sizeof(char));
    return 0;
}


中文占2个字节(包括中文字符?);那么chinese在内存中占的长度为 : 2*4 + 1(\0占一个字节) = 9 , 其打印的结果如下:

C中关于string的内置函数一般在string.h当中
1,strchr  : 原型str(char *,char) ->在char[]当中,得到一个指向字符串中char(第一个)的指针。如在“Aonaufly”中找到‘o’的指针 ,如果没找到返回NULL。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    system("color 1A");
    char names1[] = {'A','o','o','a','u','f','l','y','\0'};
    char * prt_cahr = strchr(names1 , 'o');
    if(prt_cahr != NULL)
    {
        *prt_cahr = 's';
    }
    printf("names1 的值为 : %s\n" , names1);
    return 0;
}


运行如下:

2,strlen : 字符长度(重点 : 不计\0 , 一个中文占2个字节)。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    system("color 1A");
    char names1[] = {'A','o','o','a','u','f','l','y','\0'};
    char * prt_cahr = strchr(names1 , 'o');
    if(prt_cahr != NULL)
    {
        *prt_cahr = 's';
    }
    printf("names1 的值为 : %s\n" , names1);
    printf

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C malloc和calloc函数总结 下一篇教你如何用C++创建一个特殊的类

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目