c语言笔试题总结1,参见点击打开链接。 1. 请编写一个c函数,该函数将一个字符串逆序。 答:具体的代码如下,这里主要使用的就是一个数组元素的位置交换: #include /* 函数说明:将原始字符串逆序 函数参数:src:需要逆序的字符串 返回值 :逆序后的字符串 */ char * ReverseStr(char *src) { int index; int length; //src的长度 char tmp; //临时存放字符 int count; //存放循环次数 length = strlen(src); count = length / 2; for (index = 0; index #include int main(int argc, char *argv[]) { int i = 1; char buf[4]; strcpy(buf, "AAAA"); printf("%d\n", i); return 0; } a) When compiled and executed on x86, why does this program usually not output what the programmer intended? b) Name several ways in which the security problem that causes this program not to output what the programmer intended can be prevented WITHOUT changing the code. 答:这个题目的考点是栈数据的覆盖。因为"AAAA"实际上占据了5个字节(最后有个'\0'),所以根据变量压栈的方式,以及x86下的小端模式,会导致"/0"覆盖1,得到的结果就变成了0。 但是,实际在windows10下vs2015中,结果并不是像上面说的那样,在debug模式下,程序会报错;在release模式下,程序正常运行。且无论是哪种模式,i的值都还是1。 所以说这个问题还是根据编译器不同来决定的,至于vs2015的编译器到底做了什么,可以通过将代码反汇编来确定。 不过作为一个笔试题,能够回答上面就OK了吧,具体先就不追究了。 3. 打印结果是多少? 答:参见具体的代码。(这个题目作为笔试题