C语言,字符串输出是乱码

就是要让他选出元音字母,然后复制到第二个字符串中去,刚学C语言,实在有点笨,请各位不吝指教,多谢了。... 就是要让他选出元音字母,然后复制到第二个字符串中去,刚学C语言,实在有点笨,请各位不吝指教,多谢了。 展开
 我来答
White_MouseYBZ
2018-06-23 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6523万
展开全部
struct s p[4];只是声明了一个名为p的struct s型数组,还没有为其赋值,里面全是机器垃圾,你就用for(i=0;...)printf...输出,能得到正常数据吗?都是垃圾,当然是乱码!另:全局数组p的[]中是4,=右边却用5个元素初始化,越界了!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CNnumen911
2010-03-04 · TA获得超过1133个赞
知道小有建树答主
回答量:401
采纳率:100%
帮助的人:673万
展开全部
原因向他们说的那样, char a[]是一个局部变量, 函数返回后他在栈上的空间就自动释放了...
可以这样改下:

#include <iostream>
#include <time.h>
#include<stdlib.h>
#include <string>
using namespace std;

#define MAX_LEN 10

char* getnick()
{
int i,j;
char b;
char* a = (char*)malloc(sizeof(char) * MAX_LEN);
memset(a, '\0', sizeof(char) * MAX_LEN);
strcpy(a, "abcdef");

srand((unsigned)time(NULL));
for(i=0;i<7;i++)
{
j = rand()%7;
b = a[i];
a[i] = a[j];
a[j] = b;
}
return a;
}

void main()
{
char *p = NULL;
int i=0;

p=getnick();
puts(p);

delete[] p;
p = NULL;

system("pause");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
030910304
2013-11-03 · TA获得超过146个赞
知道小有建树答主
回答量:75
采纳率:0%
帮助的人:116万
展开全部
#include <stdio.h>
int main()
{
char str1[20],str2[20];
int i,n=0;
gets(str1);
for(i=0;str1[i]!='\0';i++)
{
if((str1[i]=='A')||(str1[i]=='E'))
{
str2[n]=str1[i];
n++;
}
str2[n]='\0';
}
puts(str2);
putchar('\n');
return 0;
}
就是 str2 的结束加上结束符‘\0’
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaobomo
2014-03-27 · TA获得超过523个赞
知道小有建树答主
回答量:533
采纳率:100%
帮助的人:362万
展开全部
没什么问题,第一个for循环后多了一个分号;只要保证你传入该函数的数组a中有准确的二十个字符就行,如:char a[]={'a','b','c','d','e','f','g','h','i','j','a','b','c','d','e','f','g','h','i','j'};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2014-03-27 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:84%
帮助的人:3676万
展开全部
按照程序是在a字符串中隔一个字符取一个形成b字符串
void main()
{ char a[21]={"1234567890abcdefghij"}
half(a);
}
输出24680bdfhj
如果出乱码,可能你的a数组赋值方面有问题,不知道你是如何定义a数组和调用函数的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式