为什么自定义一个函数,用它为char类型数组赋值然后返回一个数组,结果包含乱码字符?下面的补充很详细.谢谢.

//程序的目的是:函数create接受两个参数,通过参数char_counts为参数array[]赋值.//比如如果char_counts=1;那么就让array[]={... //程序的目的是:函数create接受两个参数,通过参数char_counts为参数array[]赋值.
//比如如果char_counts=1;那么就让array[]={a};
//比如如果char_counts=2;那么就让array[]={a,b};
//......

//比如如果char_counts=26;那么就让array[]={a,b,...,z};
//然后函数再把赋值好的数组array[]返回

//代码如下,很简单

#include <stdio.h>
char *create(char *array,const int char_counts) {//指针函数,以便返回指向一个数组的指针
for(int i=0;i<char_counts;i++)//简单的循环为array[]赋值
array[i]=i+'a';
return array;//函数返回一个数组
}

int main() {
char myarray[26];//创建一个数组,下面把它当成参数传递给create(char *,const int)函数
printf("%s\n",create(myarray,26));//※※※※问题就在结果这里※※※※
}
//※※※※※※※※※※※※※※※※※※※※※※
//为什么我得到的结果在abcd....的后面还有乱码字符,比如"烫烫烫"什么的?
//我的数组明明没有越界呀.
//

//初学者衷心求教,请耐心回答,谢谢各位回答者.解决后再奖励50积分:)
展开
 我来答
百度网友6567883c53
2012-12-08 · TA获得超过4737个赞
知道大有可为答主
回答量:1260
采纳率:0%
帮助的人:1372万
展开全部
楼主你好。
是因为判断字符串结尾是根据字符'\0'的,你创建一个数组之后并没有将内容初始化为0,添加完数据之后也没有补上'\0',所以printf会将abcd之后的内存中滑氏枣未初始核袜化的部分也输出出来。

你可以char myarray[26]={0};//将数组元素全都初始信拆化为0.
也可以:
char *create(char *array,const int char_counts) {//指针函数,以便返回指向一个数组的指针
for(int i=0;i<char_counts;i++)//简单的循环为array[]赋值
array[i]=i+'a';
array[i]='\0';//或array[i]=0,一个意思
return array;//函数返回一个数组
}
这样printf打印到d之后遇到'\0'就会停止打印了。
SUKI尤
2020-06-05
知道答主
回答量:1
采纳率:0%
帮助的人:603
展开全部
首先你这样定义是在定义一个字符数组而不是字符串(为了方便说明,先将以字符数组形式写出来的加'\0'的形式成为字符串。数组名称代表首元素地址,而字符串可以用数组肢高名输出直接为字符串(ie:char a[]="string" cout<<c >>>string)是因为字符串有一个象征结尾的'\0',电脑觉得很方便所以读的时候直接读到'\0’处而其他的数组没有一个表示停止的元素,所以电脑觉得还是默认每次读一个吧于是cout一下出来首元素地址。但是作为字符数组(不是有停止的字符串)本来应该cout出来一个首元素的地址的,但是字符数组和用字符数组表示的字符串对于电脑来说都是字斗猜符数组,所以处理的时候它直接当作你定义长度的时候少定义了一个,按照越界处理,就是默认你cout的其实是带'\0’的字符串,你定义位数的时候少了一个。
那如果不想加'\0’的话怎么输出数组元素呢?答案是按照一般数组输出元素的方式:用循环
以空饥型上仅供参考哈哈哈,不是专业的,一点点个人的看法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
松甜恬0Je4ba
2012-12-08 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3392万
展开全部
字符数组的长此桐大森竖度一般是字符的个数+1;这个1就是留给 '\0'使用的,作为字符串的结束符。
也就是说,如果你的字符需要存储26个字符,则你需要给27的长度。

#include <stdio.h>
char *create(char *array,const int char_counts) {//指针函数,以便返回指向一个数组的指针
for(int i=0;i<char_counts-1;i++)//简单的循环为array[]赋值
array[i]=i+'a';

array[i]='\0'; //将数组的最后一个字符,设置为结束符

return array;//函数返回一个数组
}
int main() {
char myarray[27];//创建一个数组,下面把它当成参数传递给create(char *,const int)函数
printf("%s\n",create(myarray,27));//※※※※问题就在结果这里※※※※轮让
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wesky20
2012-12-08
知道答主
回答量:6
采纳率:0%
帮助的人:8413
展开全部
分数真高。。
1.字符后加'\0',故假如你想存储26个字符应声明数组长度为27
2.记住声明变量一定初始化,这适合于绝大多数场合,也是编程规模核范。
3.觉得完全没必要返回char*指针,因为你这操作本来就是对于指针如果操作成功已经更纳码唯改了指针里面的内容完成了赋值,函数声明为void即可。
就是说
void create(char *array,const int char_counts) {//指针函数,以便返回指向一个数组的指针
for(int i=0;i<char_counts;i++)//简单的循环为array[]赋值
array[i]=i+'a';
}

那么你调用这个函数应该是这样的,
int main() {
char myarray[26] = “ ”;//创洞培建一个数组,下面把它当成参数传递给create(char *,const int)函数
printf("%s\n",myarray);//※※※※问题就在结果这里※※※※
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
笑年1977
2012-12-08 · TA获得超过7.2万个赞
知道大有可为答主
回答量:2.2万
采纳率:81%
帮助的人:1.2亿
展开全部
那是因为数组最后一个你没有加上结束符'\0',所以后面会跟一些乱码
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式