字符函数和字符串函数以及内存函数
在不同的系统和C语言标准库的实现中都规定了一些错误码,一般是放在errno.h这个头文件中说明的,C语言程序启动的时候就会使用一个全面的变量errno来记录程序的当前的错误码,只不过程序启动的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会讲对应的错误码,存放在errno中,而一个错误码的数字是整数很难理解是什么意思,所以每一个错误码都是有对应的错误信息的。字
1.字符分类函数
以下函数的头文件为ctype.h
函数 如果它的参数符合下列条件就返回真
iscntrl 任何控制字符。
isspace 空白字符:空格‘ ’,换页 ‘\f’ ,换行 ‘\n’ ,回车 ‘\f’ ,制表符‘\t’或者垂直制表符‘\v’。
isdigit 十进制数字0~9。
isxdigit 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F。
islower 小写字母a~z。
isupper 大写字母A~Z。
isalpha 字母a~z或A~Z。
isalnum 字母或数字,a~z,A~Z,0~9。
ispunct 标点符号,任何不属于数字或者字母的图形字符(可打印)。
isprint 任何可打印字符,包括图形字符和空白字符。
这些函数使用方法基本类似我们用islower进行举例:
islower是能够判断参数部分的c是否是小写字母的,通过返回值来说明是否是小写字母,如果是小写字母就返回非零的整数,如果不是小写字母,则返回0。
例:将字符串的中小写转变为大写
#include <stdio.h>
#include <ctype.h>
int main()
{
int i = 0;
char str[] = "Test string.\n";
char c;
while(str[i])
{
c = str[i];
if(islower(c))
c -= 32;
putchar(c);
i++;
}
return 0;
}
2.字符转换函数
int tolower(int c)//将参数传出去的大写字母转小写
int toupper(int c)//将参数传出去的小写字母转大写
将刚才的代码进行更改
#include <stdio.h>
#include <ctype.h>
int main()
{
int i = 0;
char str[] = "Test string.\n";
char c;
while(str[i])
{
c = str[i];
if(islower(c))
c = toupper(c);
putchar(c);
i++;
}
return 0;
}
3.strlen函数
strlen函数的作用是计算字符串的长度。
size_t strlen(const char* str)
字符串以‘\0’作为结束标志,strlen函数返回的是在字符串中‘\0’前面出现的字符个数(不包含'\0')。
参数指向的字符串必须要以‘\0’结束。
注意函数的返回值为size_t,是无符号的。
strlen的使用需要包含头文件。
例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello";
printf("长度: %zu\n", strlen(str)); // 输出: 5
return 0;
}
4.strcpy函数
strcpy函数的作用是将源字符串拷贝到目标字符串。
char* strcpy(char* destination,const char* sourse)
源字符必须以‘\0’结束。
会将源字符中的‘\0’拷贝到目标空间。
目标空间必须足够大,以确保能存放源字符串。
目标空间必须可修改。
例:
#include <stdio.h>
#include <string.h>
int main() {
char dest[20];
strcpy(dest, "Hello");
printf("复制后: %s\n", dest); // 输出: Hello
return 0;
}
5.strcat函数
strcat函数的作用是将源字符串追加在目标字符串末尾。
char* strcat(char* destination,const char* sourse)
源字符串必须以‘\0’结束。
目标字符串中也得有‘\0’,否则没有办法知道追加从哪里开始。
目标空间必须有足够大,能容纳下源字符串的内容。
目标空间必须可修改。
注意:字符串不能给自己追加,否则会出现死循环以及程序崩溃。
例:
#include <stdio.h>
#include <string.h>
int main() {
char dest[20] = "Hello";
strcat(dest, " World");
printf("连接后: %s\n", dest); // 输出: Hello World
return 0;
}
6.strcmp函数
strcmp函数的作用是比较两个字符串。
int strcmp(const char* str1,const char* str2)
第一个字符串大于第二个字符串,则返回大于0的数字。
第一个字符串等于第二个字符串,则返回0。
第一个字符串小于第二个字符串,则返回小于0的数字。
判断两个字符串大小的方法:比较两个字符串中对应位置上字符ASCII码值的大小。
例:
#include <stdio.h>
#include <string.h>
int main() {
int result = strcmp("apple", "banana");
printf("比较结果: %d\n", result); // 输出: 负数
return 0;
}
7.strncpy函数
strncpy函数的作用是从源字符串复制指定数量的字符到目标字符串。
char* strncpy(char* destination, const char* sourse, size_t num)
如果源字符串长度大于num只复制前num个字符,不会添加\0。
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后面追加0,直到num个。
例:
#include <stdio.h>
#include <string.h>
int main() {
char dest[10];
strncpy(dest, "Hello World", 5);
dest[5] = '\0'; // 手动添加结束符
printf("复制后: %s\n", dest); // 输出: Hello
return 0;
}
8.strncat函数
strncat函数的作用是从源字符串追加指定数量的字符到目标字符串。
char* strncat(char* destination, const char* sourse, size_t num)
如果sourse指向的字符串的长度小于num的时候,只会将字符串中到\0的内容追加到destination指向的字符串末尾。
例:
#include <stdio.h>
#include <string.h>
int main() {
char dest[20] = "Hello";
strncat(dest, " World!", 6);
printf("连接后: %s\n", dest); // 输出: Hello World
return 0;
}
9.strncmp函数
strncmp函数的作用是比较两个字符串的前n个字符。
int strncmp(const char* str1, const char* str2, size_t num)
比较str1和str2的前num个字符,如果相等就继续往后比较,最多比较num个字母,如果提前发现不一样,就提前结束。如果num个字符都相等,就是返回0。
例:
#include <stdio.h>
#include <string.h>
int main() {
int result = strncmp("apple", "application", 3);
printf("比较结果: %d\n", result); // 输出: 0 (前3个字符相同)
return 0;
}
10.strstr函数
strstr函数的作用是在字符串中查找子串的第一次出现的位置
char* strstr(const char* str1, const char* str2)
函数返回字符串在str2在字符串str1中第一次出现的位置。
字符串的匹配比较不包含\0字符,以\0作为结束标志。
例:
#include <stdio.h>
#include <string.h>
int main() {
char *found = strstr("Hello World", "World");
printf("找到: %s\n", found); // 输出: World
return 0;
}
11.strtok函数
strtok函数的作用是根据分隔符将字符串分割成多个标记。
char* strtok(char * str, const char* sep)
sep参数指向第一个字符串,定义了用作分隔符的字符集合。
第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
strtok函数找到str中的下一个标记,并将其用\0结尾,返回一个指向这个标记的指针(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符一般都是临时拷贝的内容并且可以修改。)
strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
如果字符串中不存在更多的标记,则返回NULL指针。
例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "a,b,c";
char *token = strtok(str, ",");
printf("第一个标记: %s\n", token); // 输出: a
return 0;
}
12.strerror函数
strerror函数的作用是将错误编号转换为对应的错误描述字符串。
char* strerror(int errnum)
strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。
在不同的系统和C语言标准库的实现中都规定了一些错误码,一般是放在errno.h这个头文件中说明的,C语言程序启动的时候就会使用一个全面的变量errno来记录程序的当前的错误码,只不过程序启动的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会讲对应的错误码,存放在errno中,而一个错误码的数字是整数很难理解是什么意思,所以每一个错误码都是有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。
例:
#include <stdio.h>
int main()
{
FILE * pFile;
pFile = fopen ("unexit.ent","r");
//fopen以读的形式打开文件的时候,如果文件不存在就打开失败
if(pFile == NULL)
printf("Error opening file unexist.ent: %s\n",strerror(errno));
return 0;
}
//输出:Error opening file unexist.ent: No such file or directory
C语言内存函数
13.memcpy函数
memcpy函数的作用是从源内存地址复制指定字节数到目标内存呢地址。
void* memcpy(void* destination, const void* sourse, size_t num)
函数memcpy从sourse的位置开始向后复制num个字节的数据到destination指向的内存位置。
这个函数在遇到'\0'的时候并不会停下来。
如果sourse和destination有任何的重叠,复制的结果都是未定义的。
例:
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello";
char dest[10];
memcpy(dest, src, 6); // 复制6个字节(包括\0)
printf("复制: %s\n", dest); // 输出: Hello
return 0;
}
14.memmove函数
memmove函数的作用是从源内存地址移动指定字节数到目标内存地址。
void* memmove(void* destination, const void* sourse, size_t num)
和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
如果源空间和目标空间出现重叠,就得使用memmove函数处理。
例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "ABCDE";
// 将前3个字符移动到后3个位置
memmove(str + 2, str, 3);
printf("移动: %s\n", str); // 输出: ABABC
return 0;
}
15.memset函数
memset函数的作用是将内存区域的前n个字节设置为特定值。
void* memset(void* ptr, int value, size_t num)
memset使用来设置内存的,将内存中的值以字节为单位设置成想要的内容。
例:
#include <stdio.h>
#include <string.h>
int main() {
char buffer[20] = "Hello world";
memset(buffer, 'X', 9); // 设置9个字节为'X'
printf("设置: %s\n", buffer); // 输出: 设置: XXXXXXXXXld
return 0;
}
16.memcmp函数
memcmp函数的作用是比较两个内存区域的前n个字符。
int memcmp(const void* ptr1, const void* ptr2, size_t num)
ptr1大于ptr2就返回大于零的值。
ptr1等于ptr2就返回0。
ptr1小于ptr2就返回小于零的值。
例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "apple";
int result = memcmp(str1, str2, 5);
printf("比较: %d\n", result); // 输出: 0 (相等)
return 0;
}
更多推荐

所有评论(0)