几个有趣的C语言面试题及答案
所属分类 c
浏览量 776
涉及指针 进程 运算 结构体 函数 内存
gets 函数
#include "stdio.h"
int main() {
char buff[9];
memset(buff,0,sizeof(buff));
gets(buff);
// fgets(buff, sizeof(buff), stdin);
printf("%s\n",buff);
return 0;
}
char* gets(char* buffer)
char* fgets(char* s, int n, FILE* stream)
fgets 最多只能读入n-1个字符
gets 可能导致缓存溢出
MAC 下运行 提示
warning: this program uses gets(), which is unsafe.
strcpy 函数
char *strcpy(char *dest,char *src)
char * strncpy(char *dest, char *src, size_tn)
#include "stdio.h"
#include "string.h"
int main(int argc, char *argv[]) {
if(argc!=2){
printf("please input Password\n");
return 0;
}
int flag = 0;
char passwd[9];
memset(passwd,0,sizeof(passwd));
// strcpy(passwd, argv[1]);
strncpy(passwd, argv[1],sizeof(passwd));
if(0 == strcmp("hello", passwd)) {
flag = 1;
}
if(flag) {
printf("\n Password cracked \n");
}else {
printf("\n Incorrect passwd \n");
}
return 0;
}
main()的返回类型
#include "stdio.h"
#include "stdlib.h"
int main(void){
char *ptr = (char*)malloc(10);
if(NULL == ptr){
printf("\n Malloc failed \n");
return;
} else{
// Do some processing
// no free , memory leak
// free(ptr);
}
return;
}
warning: return type of 'main' is not 'int'
main()的返回类型应该是 int 而不是 void
int 返回类型会让程序返回状态值
内存泄露
#include "stdio.h"
#include "stdlib.h"
int main(void){
char *ptr = (char*)malloc(10);
if(NULL == ptr){
printf("\n Malloc failed \n");
return;
} else{
// Do some processing
// no free , memory leak
// free(ptr);
}
return;
}
使用_exit退出
#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
void func(){
printf("\n Cleanup function called \n");
return;
}
int main(void){
int i = 0;
atexit(func);
for(;i<0xffffff;i++);
_exit(0);
// return 0;
}
_exit() 不会调用 atexit() 注册的函数
接受任何类型的参数并返回 int 的函数
int func(void *ptr)
*和++操作
#include "stdio.h"
int main(void){
char* ptr = "Linux";
printf("%c",*ptr++);
printf("%c\n",*ptr);
return 0;
}
输出 Li
*ptr++ 相当于 *(ptr++)
修改只读字符串
#include "stdio.h"
int main(void){
char* ptr = "Linux";
*ptr = 'A';
printf("%s\n",ptr);
return 0;
}
返回局部变量地址
#include "stdio.h"
int* func(int value){
int a = value;
a++;
return &a;
}
int* func2(int* value){
(*value)++;
return value;
}
int main(void){
int a = 9;
int* p = func(a);
printf("%d\n",*p);
p = func2(&a);
printf("%d\n",*p);
printf("%d\n",a);
return 0;
}
#include "stdio.h"
int main(void){
int a = 1,b=2,c=3;
printf("%d %d %d\n",a+b+c,b*=2,c*=2);
return 0;
}
MAC 下 编译警告
warning: unsequenced modification and access to 'b'
warning: unsequenced modification and access to 'c'
输出
6 4 6
linux
gcc version 4.8.5 20150623 (Red Hat 4.8.5-11)
编译无警告
输出
11 4 6
上一篇
下一篇
c++异常处理
c++菱形继承
c++ 虚函数多态
c 指针数组
二维数组函数入参用法
二维整型数组参数传递的三种方式