笔试中常出现的C语言读程序题

程序1:请问运行Test函数会有什么样的结果?

void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); }

程序2:请问运行Test函数会有什么样的结果?

char *GetMemory(void) { char p[] = "hello world"; return p; } void Test(void) { char *str = NULL; str = GetMemory(); printf(str); }程序3: 请问运行Test函数会有什么样的结果?
void GetMemory2(char **p, int num) { *p = (char *)malloc(num); } void Test(void) { char *str = NULL; GetMemory(&str, 100); strcpy(str, "hello"); printf(str); }

程序4:请问运行Test函数会有什么样的结果?

void Test(void) { char *str = (char *) malloc(100); strcpy(str, “hello”); free(str); if(str != NULL) { strcpy(str, “world”); printf(str); } }

程序5:请问运行Test函数会有什么样的结果?

void test1() { char string[10]; char *str1="0123456789"; strcpy(string, str1); }

程序6:考察宏定义!输出是什么?

#define fire(X,Y) (X)--;(Y)++;(X)*(Y); int main() { int a=3,b=4,i; for(i=0;i<5;i++) fire(a,b) printf("%d,%d",a,b); }

【结果】

1、程序崩溃。因为GetMemory并不能传递动态内存,Test函数中的 str一直都是 NULL。strcpy(str, "hello world");将使程序崩溃因为GetMemory并不能传递动态内存,Test函数中的 str一直都是 NULL。strcpy(str, "hello world");将使程序崩溃。

2、可能是乱码。因为char p[] = "hello world";这句话,意思是把字符串复制到数组p中,而数组p是局部变量,在栈空间内,GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。

3、能够输出hello,但是malloc后没有free,会导致内存泄漏

4、篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str != NULL)语句不起作用。

5数组越界

6、这种题型只需要把宏定义直接展开到程序中即可!结果为-2,5。for循环只执行了(X)--。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值