C语言编译出来为什么是这样的

来源:百度知道 编辑:UC知道 时间:2024/05/30 17:33:48
#include <stdio.h>
#include <string.h>
题目:它的功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。

我写的
void fun(char *s, char t[])
{
int i,j=0,n;
n=strlen(s);
for(i=0;i<n;i=i+2)
if(s[i]%2==0)
{ t[j]=s[i];
j++;
}
}
main()
{
char s[100], t[100];
printf("\nPlease enter string S:");
scanf("%s", s);
fun(s,t);
printf("\nThe result is : %s\n", t);
}
输入ABCDEFG123456
但出来的结果是
The result is :246烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫BCDEFG123456

而且烫前面就是正确的
我加过之后为什么结束的后面没有烫而是个问号了?这是不是正常现象?

因为字符数组里面的默认值就是烫你需要在最后一个元素后面加一个结束符号\0这样就不会出现这样的问题

字符串以'\0'结尾,fun()里最后加上一句t[j]='\0';

子函数循环结束时加上
t[j+1]=a[s+1];

就好啦~
原因同楼上各位猛男

char s[100], t[100];
memset(s, 0, 100);
memset(t, 0, 100);
...

需要加个\0的字符串结束符
也可以把t数组中的字符一个个printf出来;

也就是:多定一个m;

int m;
for(m=1;m<=j;m++)printf("%c",a[m]);
printf("\n");
把这放在fun中上一个for函数后边就行了

程序如下:

#include "stdafx.h"
#include"stdio.h"
#include"string.h"

void fun(char *s, char t[])
{
int i,j=0,n,m;
n=strlen(s);
for(i=0;i<n;i=i+2)
if(s[i]%2==0)
{ t[j]=s[i];
j++;
}
printf("\nThe result is : \n");
for(m=1;m<j;m++)printf("%c",t[m]);
printf("\n");
}
void main(void)
{
char s[100], t[100];
print