小白学开发(iOS)基础C_字符串 (2015-07-16)

//
//  main.c
//  字符串
//
//  Created by admin on 15/7/16.
//  Copyright (c) 2015年 admin. All rights reserved.
//


#include <stdio.h>
#include <string.h> // //包含该头文件 为了能够倒入strcat的声明


int main(int argc, const char * argv[]) {
    
//  注意:
    
//    char name[] = "cool";
//    char name2[] = {'l', 'n', 'j'};
    
//  1、字符串的特点就是:字符串后要有\0,没有\0就不是字符串,即name2就不是字符串
//  2、字符串打印可以用%s,它打印的原理是:根据传入的name的地址逐个去取数组中的元素然后输出,知道遇到\0的位置
//     像name2没有\0,所以出现脏读
    
    return 0;
}


void testStrLength()
{
    //  3、计算字符串的长度
    //      3.1 使用 sizeof()来计算,它计算出的是字符串长度加上\0,即实际字符串长度+1
    char name1[] = "lee";
    int length1 = sizeof(name1);
    printf("name1 的长度 = %d\n", length1); //打印出来的结果是4
    
    //      3.2 使用 strlen () 来计算,它计算出的是实际字符串的长度,并不包含\0
    //          原理:就是逐个取出字符串中的内容,如果是不\0就+1
    char name2[] = "cool";
    int length2 = strlen(name2);
    printf("name2 的长度 = %d\n", length2); //打印出来的结果是4


}


void testStrCmp()
{
    //  4、字符串比较
    //      对给定的两个字符串进行比较,如果str1等于str2就返回0,从第一个字符开始逐个比较ASCII码
    //      如果str1大于str2就返回  一个正数
    //      如果str1小于str2就返回  一个负数
    
    //      4.1 使用strcmp(const char * str1, const char * str2)来计算
    char str1[] = "abcdef";
    char str2[] = "abcppp";
    int result1 = strcmp(str1, str2);
    printf("result = %d\n",result1);
    
    //      4.2 使用strncmp(const char * str1, const char * str2, size_t length)来计算
    //          这个函数中多了一个length参数,这个参数代表要比较多少个,即对两个字符串的length个字符比较
    char str3[] = "abcdef";
    char str4[] = "abcapp";
    int result2 = strncmp(str3, str4, 4); //只比较前4个字符
    printf("result = %d\n",result2);
  
}


void testStrCpy()
{
    //  5、字符串拷贝
    //      会将src里面的字符串拷贝到buf里面,注意:buf的容量要足够大否则会报错,如果buf中有数据拷贝之后会被覆盖
    
    //      5.1 使用 strcpy(char *dest, const char *src)
    char str5[10] = "abdex";
    char str6[9] = "opo";
    printf("拷贝前str5:%s\n", str5);
    strcpy(str5, str6);
    printf("拷贝后str5:%s\n", str5);
    
    //      5.2 使用strncpy(char * dest, const char * src, size_t length);
    //          会将src中的length个字符拷贝到dest中
    //          (如果要将src中的所有字符全部拷贝到dest中,而又不知道dest的容量,则下面可以动态计算出length)
    char str7[10] = "abdexxxxx";
    char str8[9] = "opozmk";
    int length  = sizeof(str8)/sizeof(char) - 1;    // 这里 -1 代表减去\0占的一个长度
    printf("拷贝前str7:%s\n", str7);
    strncpy(str7, str8, length);
    printf("拷贝后str7:%s\n", str7);
    
}


void testStrCat()
{
    //  6、字符串的拼接(或连接)
    //      将src里面的字符串拼接到dest后面,注意:dest字符数组的长度必须能够容纳下 buf + src + 1 的长度
    
    //      6.1 使用 strcat(char *dest, const char * src);
    char str9[10] = "abdex";
    char str10[5] = "opo";
    printf("拷贝前str9:%s\n", str9);
    strcat(str9, str10);
    printf("拷贝后str9:%s\n", str9);
    
    //      6.2 使用 strncat(char * dest, const char * src, size_t length);
    //          会将src中的length个字符拼接到dest后
    //          (如果要将src中的所有字符全部拷贝到dest中,而又不知道dest的剩余容量,则下面可以动态计算出啊length)
    char str11[10] = "abdeerde";
    char str12[5] = "opo";
    unsigned long  length3 = (sizeof(str11)/sizeof(char)) - strlen(str11) - 1;
    //              这里 表示str11的最大容量减去实际使用的容量再减\0,就是剩余的容量,这样就保证了不会拼接后过长溢出
    printf("拷贝前str11:%s\n", str11);
    strncat(str11, str12, length3);
    printf("拷贝后str11:%s\n", str11);

    


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值