C语言字符串函数,超详细,超易懂,野指针与开辟空间

目录

野指针

字符串相关的函数

字符串比较函数strcmp()

 字符串包含函数strstr()

字符串分割函数strtok() 

 字符串拼接函数strcat()

 字符串复制函数strcpy()

 字符串转换为整型数函数

野指针

对于野指针,一定要使用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;
}

 

 字符串转换为整型数函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值