//
// 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);
}
// 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);
}