网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

关于C语言函数返回char*类型的一些问题-创新互联

@关于C语言函数返回char *类型的一些问题TOC

创新互联是一家专业提供汝城企业网站建设,专注与网站设计制作、做网站H5响应式网站、小程序制作等业务。10年已为汝城众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。关于C语言函数返回char *类型的一些问题

以下是我在写C语言中返回值类型为char *函数时遇到的一些问题,在参考了博客:https://blog.csdn.net/Xixo0628/article/details/119870914后修改代码可成功运行。

题目

输入一个字符串,然后输入两个字符,输出该字符串中从第一个字符匹配的位置到第二个字符匹配的位置的所有字符。通过返回字符指针的子函数实现。(从字符串的开头搜索第一个字符,同时从字符串的末尾查找第二个字符。)输入:programming r g,输出:rogramming。

原代码
#include#includechar* subString(char str[50], char a, char b){int i = 0, j = 0, count1 = 0, count2 = 0;
	char *newstr;
	while(str[i] != '\0'){if(str[i] == a){	count1++;
		}
		if(str[i] == b){	count2++;
		}
		if(count1>=1 && count2<=2){	newstr[j] = str[i];
			j++;
		}
		i++;
	}
	newstr[j] = '\0';
	return newstr;
}

int main(){char str[50];
	printf("Enter a string:");
	gets(str);
	char* res = NULL;
	printf("Enter two char:");
	char a,b;
	scanf("%c %c",&a,&b);
	res = subString(str,a,b);
	printf("%s",res);
	return 0;
}
运行结果

在这里插入图片描述
很奇怪,返回值不为0,无结果输出

修改后的代码
char* subString(char str[50], char a, char b){int i = 0, j = 0, count1 = 0, count2 = 0;
	//此处添加了malloc
	char *newstr = (char *)malloc(sizeof(char));
	while(str[i] != '\0'){if(str[i] == a){	count1++;
		}
		if(str[i] == b){	count2++;
		}
		if(count1>=1 && count2<=2){	newstr[j] = str[i];
			j++;
		}
		i++;
	}
	newstr[j] = '\0';
	return newstr;
}
运行结果

在这里插入图片描述
成功!

分析原因

当函数返回作为数组名的newstr之后,临时字符数组的空间就会被释放。之后又重新调用了新的函数printf,导致最终根据返回指针所输出的结果变成了刷新后的值,而这个值几乎可以认为是随机的。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享文章:关于C语言函数返回char*类型的一些问题-创新互联
URL网址:http://bjjierui.cn/article/ccicec.html

其他资讯