目录
野指针
对于野指针,一定要使用malloc开辟空间或者字符串复制的方式开辟空间
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char *tmp = "iiangxiaoya";//定义字符串时,直接分配了内存
//sizeof的大小始终是指针的大小,即sizeof(char *)= 8
printf("strlen:%ld,str:%s,sizeof:%ld\n", strlen(tmp), tmp, sizeof(tmp)); // strlen:11,str:jiangxiaoya,sizeof:8
char *cmd; //野指针
// printf("strlen:%ld,str:%s,sizeof:%ld\n”,strlen(cmd),cmd,sizeof(cmd));由于没有给野指针分配内存从而发生分段故障
cmd = (char *)malloc(128 * sizeof(char)); //对野指针进行操作时,一定要分配空间
memset(cmd, '\0', 128);
printf("strlen:%ld,str:%s,sizeof:%ld\n", strlen(cmd), cmd, sizeof(cmd)); // strlen:0,str:,sizeof:8
strcat(cmd, "haozigeorjiangxiaoya");
printf("strlen:%ld,str:%s,sizeof:%ld\n", strlen(cmd), cmd, sizeof(cmd)); // strlen:20,str:haozigeorjiangxiaoya,sizeof:8
//输出字符串的方式,指针偏移
while (*cmd != '\0')
{
printf("%c",*cmd);
fflush(stdout);
*cmd++;
}
printf("\n");
return 0;
}
字符串相关的函数
字符串比较函数strcmp()
判断两个字符串是否相等,字符串相等时,该函数返回0,字符串不相等时该函数返回其他值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int ret;
char tmp[30] = "haozige";
char *str; //对于野指针,一定要开辟内存空间,赋值字符串时也开辟了空间
// str = (char *)malloc(32*sizeof(char));
str = "jiangxiaoya";
if ((ret = strcmp(tmp, "haozige")) == 0){
printf("equal\n");
}else{
printf("ret is %d\n", ret);
}
if ((ret = strcmp(tmp, str)) == 0){
printf("equal\n");
}else{
printf("ret is %d\n", ret);
}
return 0;
}
字符串包含函数strstr()
判断字符串str1是否包含字符串str2,包含时返回值不等于NULL,不包含时返回值为NULL
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int ret;
char tmp[30] = "haozige";
char *str;
// str = (char *)malloc(32*sizeof(char));
str = "jiangxiaoya";
//判断字符串1是否包含字符串2
if (strstr(tmp, "haozi") != NULL){
printf("contain\n");
}else{
printf("not contain\n");
}
//判断字符串1是否不包含字符串2
if (strstr(tmp, str) == NULL){
printf("not contain\n");
}else{
printf("contain\n");
}
return 0;
}
字符串分割函数strtok()
第一次分割传入需要分割的字符串和分割符,后面进行分割传入NULL和分割符
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
// char *strtok(char *str, const char *delim);
char tmp[128] = "haozige jiangxiaoya,zhutoucai.erbi";
char *str = "haozige jiangxiaoya,zhutoucai.erbi";
printf("division1:%s\n", strtok(tmp, " ")); // haozige
printf("division2:%s\n", strtok(NULL, ",")); // jiangxiaoya
printf("division3:%s\n", strtok(NULL, ".")); // zhutoucai
printf("division4:%s\n", strtok(NULL, "")); // erbi
printf("tmp:%s,tmpSize:%ld\n", tmp, strlen(tmp)); // haozige
printf("division1:%s\n", strtok(str, " "));
return 0;
}
字符串拼接函数strcat()
#include <stdio.h>
#include <string.h>
int main()
{
char tmp[32] = "haozige";
char *p = "jiangxiaoya";
char str[32] = "zhutoucai";
printf("return is %s\n", strcat(tmp, "nihao")); // haozigenihao
printf("return is %s\n", strncat(str, "nihaoerbi", 5)); // zhutoucainihao
return 0;
}
字符串复制函数strcpy()
#include <stdio.h>
#include <string.h>
int main()
{
char *tmp = "jiangxiaoya";
char p[32] = {'\0'};
char *str;
str = strncpy(p, tmp, 5);
printf("tmp = %s\n", tmp); // jiangxiaoya
printf("p = %s\n", p); // jiang
printf("str = %s\n", str); // jiang
return 0;
}