关于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*类型的一些问题-创新互联
文章分享:http://bzwzjz.com/article/ccicec.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都商城网站建设 成都网站建设公司 定制级高端网站建设 重庆网站建设 企业网站设计 成都网站建设 成都品牌网站设计 高端定制网站设计 网站建设方案 成都h5网站建设 成都商城网站建设 网站设计 企业手机网站建设 成都网站建设公司 网站设计 成都网站设计 定制网站制作 企业网站建设 外贸网站设计方案 LED网站设计方案 成都网站设计 成都网站制作