东华复试上机备考踩坑记-11年第五题

在这里插入图片描述
我的代码:

/*
	函数fun的功能是:将s所指字符串中下标为奇数、同时ASCII值也为奇数的字符删除,
	串中剩余的字符形成一个新串放在t所指的数组中
*/ 
#include<stdio.h>
#include<string.h>

void fun(char s[], char t[]) {
	int len = strlen(s);
	int i = 0, j = 0;
	
	for (i = 0; i < len; i++) {
		if (i % 2 == 0 || ((int)s[i]) % 2 == 0) {// 下标为偶数或者ASCII值为偶数 
			t[j++] = s[i];
		}
	}
	t[j] = '\0';
	
	for (i = 0; i < j; i++) {// Trace 20/1/19 15:55 为什么这个循环出来就全变成AAAAAAA了??? 
		printf("t=%s\n", t);
		s[i] = t[i]; 
	}
	s[i] = '\0';
} 

int main() {
	char s[] = "ABCDEFG12345";
	char t[] = "";
	
	fun(s, t);
	printf("\n%s %s\n", s, t);
	//printf("\n%s\n", t);
	
	return 0;
}

没想到运行之后是这样的:
在这里插入图片描述
这什么鬼?怎么同一个字符串输出来慢慢就全变成AAAAAAAAAA了?后来调试了很久,我以为是fun()函数的第二个循环有问题,因为前面都是正常输出的。不过这个理由我觉得实在是说不过去,百思不得其解,遂咨询学姐。
学姐说这个是s本身出了问题,她说把s和t设置成全局变量就能正常输出,我试了下果然是耶!不过学姐也不知道为啥设置成全局变量就正常,而设置成局部变量就抽风……
跪求大佬能告诉我为啥

发布了34 篇原创文章 · 获赞 6 · 访问量 6118

猜你喜欢

转载自blog.csdn.net/qq_41409120/article/details/104071080