c语言练习题1(有答案)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、问答题

1.请问以下代码有什么问题:

int main()

{

char a;

char *str=&a;

strcpy(str,"hello");

printf(str);

return 0;

}

答:stcpy是将“hello”覆盖到str上,str却没有足够的容量,出错:栈溢出改为

int main()

{

char a[10];

char *str=a;

strcpy(str,"hello");

printf("%s",str);

return 0;

}

PS:

1.printf()格式不对

2.虽然运行结果是正确的能够打印:hello , 但是会有栈的错误,因为a是一个char 数据,在这里分配的内存给1一个字节,所以在strcpy会出现内存访问越界

2.int (*s[10])(int) 表示的是什么啊

答:存放返回值和参数都是整型的函数的指针的数组

PS:

函数指针数组

3.

void main()

{

char aa[10];

printf(“%d”,strlen(aa));

}

会出现什么问题?打印结果是是多少?

答:strlen对应的是ld,把d%改为ld%,那么打印结果是0

PS:

打印结果是未知的。

Sizeof 与数组初始化没有关系。

Strlen 跟数组初始化有关系的,打印结果会根据数组中出现‘\0’为止

4.头文件中的ifndef/define/endif 干什么用?

答:防止重定义,也就是防止对已经声明的变量产生冲突

PS:

ifndef _MAIN_H_ // 如果没有定义某个宏

Define //马上就定义这个宏

。。

。。

endif // 结束判断

为了防止头文件被用户多次包

5.程序哪里有错误

wap( int* p1,int* p2 )

{

int * p ;

*p = *p1;

*p1 = *p2;

*p2 = *p;

}

答:p指针没有指向一块地址,所以也就不能放p1上的目标,报错:栈溢出,可改为

void wap( int* p1,int* p2 )

{

int c;

int *p=&c;

*p = *p1;

*p1 = *p2;

*p2 = *p;

printf("a=%d,b=%d",*p1,*p2);

}

int main()

{

int a,b;

a=1;

b=2;

printf("a=%d,b=%d\n",a,b);

wap(&a,&b);

return 0;

}

PS:

1.返回值

2.指针p没有初始化,出现了野指针

3.指针p在赋值之前没有分配内存空间,不可以*p= *p1 ;

6.请说明以下const关键字的作用?

Const int * ptr; * ptr被const

int *const ptr; ptr被const

const int Num; Num被const

答:const作用:限定一个变量不允许被改变

PS:

1.表示不能使用ptr来修改ptr所指向的内容

2.表示不能修改ptr所执行的内容(地址)

3.表示不允许修改NUM得值

7.关键字static的作用是什么?

答:首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。

(一)隐藏,对其他源文件不可见。修饰变量(全局变量,局部变量)为内部(静态),修饰函数为内部(静态)

(二)保持变量内容的持久。例如函数(非主函数)内被static修饰的变量a,函数被释放后,变量a不被释放。

(三)默认初始化为0。例如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加’\0’太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是’\0’

PS:

第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。

第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。

第三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。初始化的时候自动初始化为0;

(四)

8.简述建立一个TCP连接的几个步骤。(东方拓宇科技有限公司)

答:tcp连接可以说是”三次握手“。一、客户端向服务端请求连接服务端的权限给予连接客户端的权限;二、服务端向客户端发起连接,并给予连接服务端的权限;三、客户端向服务端连接。

PS:(自己理解,三次握手)

连接建立阶段:

第一次握手:客户端的应用进程主动打开,并向客户端发出请求报文段。

第二次握手:服务器应用进程被动打开。若同意客户端的请求,则发回确认报文

第三次握手:客户端收到确认报文之后,通知上层应用进程连接已建立,并向服务器发出确认报文,当服务器收到客户端的确认报文之后,也通知其上层应用进程连接已建立。

相关文档
最新文档