亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

12個關于C語言的有趣問答

2020-01-26 15:27:27
字體:
來源:轉載
供稿:網友

本文匯總了12個關于C語言的問答,對于加深對C語言程序設計的難點理解很有幫助,讀者可參考一下:

1、gets() 方法

問:以下代碼有個被隱藏住的問題,你能找到它嗎?

答:這個不顯眼的問題就是使用了 gets() 方法。此方法接受一個string類型參數,但是卻沒有檢測此數值是否 有足夠的空間來拷貝數據。所以這里我們一般用 fgets() 方法將來的更好。

#include<stdio.h> int main(void){  char buff[10];  memset(buff,0,sizeof(buff));   gets(buff);   printf("/n The buffer entered is [%s]/n",buff);   return 0;}

2、strcpy() 方法

問:密碼防護是很基本的功能,看看能否搞定下面這段代碼?

#include<stdio.h> int main(int argc, char *argv[]){  int flag = 0;  char passwd[10];   memset(passwd,0,sizeof(passwd));   strcpy(passwd, argv[1]);   if(0 == strcmp("LinuxGeek", passwd))  {    flag = 1;  }   if(flag)  {    printf("/n Password cracked /n");  }  else  {    printf("/n Incorrect passwd /n");   }  return 0;}

3、main() 方法的返回類型

問:請問下面這段代碼能否通過編譯?如果能的話,那么這段代碼中隱含什么問題嗎?

#include<stdio.h> void main(void){  char *ptr = (char*)malloc(10);   if(NULL == ptr)  {    printf("/n Malloc failed /n");    return;  }  else  {    // Do some processing     free(ptr);  }   return;}

答:答案是代碼能通過編譯,但是會留下針對main()方法的返回類型的警告。main()方法的真正返回類型應該為'int'而非'void'。這是因為'int'返回類型能夠讓程序返回狀態值。尤其是當這段程序作為其他應用的附屬程序時這個狀態值將更加重要。

4、內存泄露

問:請問以下代碼有內存泄露嗎?

#include<stdio.h> void main(void){  char *ptr = (char*)malloc(10);   if(NULL == ptr)  {    printf("/n Malloc failed /n");    return;  }  else  {    // Do some processing  }   return;}

答:好,雖然上面的代碼沒有對指針 ptr 進行內存釋放,但實際上即使是程序結束也不會造成內存泄露,因為當程序結束時所有一開始被占據的內存就全部清空了。但如果上面這段代碼是在 while 循環里面那將會造成嚴重的問題

補充: 如果你需要了解更多關于內存泄露的問題,你可以參考這篇文章//www.49028c.com/article/41216.htm

5、free() 方法

問:以下代碼當用戶輸入'freeze'時會奔潰,而如果輸入'zebra'則運行正常,這是為什么?

#include<stdio.h> int main(int argc, char *argv[]){  char *ptr = (char*)malloc(10);   if(NULL == ptr)  {    printf("/n Malloc failed /n");    return -1;  }  else if(argc == 1)  {    printf("/n Usage /n");  }  else  {    memset(ptr, 0, 10);     strncpy(ptr, argv[1], 9);     while(*ptr != 'z')    {      if(*ptr == '')        break;      else        ptr++;    }     if(*ptr == 'z')    {      printf("/n String contains 'z'/n");      // Do some more processing    }     free(ptr);  }   return 0;}

答:問題的根源是因為代碼在while循環中改變了 ptr 指針的地址。當輸入為'zebra'時,while循環甚至在執行 第一遍前就結束了,所以free()釋放的內存地址就是一開始malloc()分配的地址。但是當輸入'freeze'時, ptr記錄的地址在while循環中被更改,因為將會是錯誤的地址傳遞到free()方法中引起崩潰。

6、atexit with _exit

問:在以下代碼,atexit()方法并沒有被調用,你知道為什么嗎?

#include<stdio.h> void func(void){  printf("/n Cleanup function called /n");  return;} int main(void){  int i = 0;   atexit(func);   for(;i<0xffffff;i++);   _exit(0);}

答:這是因為使用了 _exit() 方法。此方法并沒有調用清除數據相關的方法,比如 atexit()等。

7、void* 與 C 結構體

問:能否設計一個方法接受任意類型的參數然后返回整數?同時是否有辦法傳遞多個這樣的參數?

A:一個能接受任意類型參數的方法像下面這個樣子:

int func(void *ptr)

如果需要傳遞多個參數,那么我們可以傳遞一個包含這些參數的結構體

8、* 與 ++ 操作符

問:以下代碼將輸出什么?為什么?

#include<stdio.h> int main(void){  char *ptr = "Linux";  printf("/n [%c] /n",*ptr++);  printf("/n [%c] /n",*ptr);   return 0;}

答:以上的輸出將是:

因為++與 * 的優先級一樣,所以 *ptr++ 將會從右向左操作。按照這個邏輯,ptr++ 會先執行然后執行*ptr。所以第一個結果是'L'。也因為 ++ 被執行了,所以下一個printf() 結果是'i'。

9、Making changes in Code segment

問:以下代碼運行時一定會崩潰,你能說出原因嗎?

#include<stdio.h> int main(void){  char *ptr = "Linux";  *ptr = 'T';   printf("/n [%s] /n", ptr);   return 0;}

答:這是因為,通過 *ptr = ‘T',此行代碼嘗試更改只讀內存存儲的字符串'Linux'。此操作當然行不通所以才會造成崩潰。

10、Process that changes its own name

問:你能否寫一個程序在它運行時修改它的名稱?

答:以下代碼可以完成

#include<stdio.h> int main(int argc, char *argv[]){  int i = 0;  char buff[100];   memset(buff,0,sizeof(buff));   strncpy(buff, argv[0], sizeof(buff));  memset(argv[0],0,strlen(buff));   strncpy(argv[0], "NewName", 7);   // Simulate a wait. Check the process  // name at this point.  for(;i<0xffffffff;i++);   return 0;}

11、局部變量的返回地址

問:下面的代碼有問題嗎?如果有,如何修改?

#include<stdio.h> int* inc(int val){ int a = val; a++; return &a;} int main(void){  int a = 10;   int *val = inc(a);   printf("/n Incremented value is equal to [%d] /n", *val);   return 0;}

答:雖然上面的代碼有時運行會很好,但是在方法 inc() 中有很嚴重的隱患。當inc()方法執行后,再次使用局部變量的地址就會造成不可估量的結果。解決之道就是傳遞變量a的地址給main()。

12、處理 printf() 參數

問:以下代碼輸出請問是什么?

#include<stdio.h> int main(void){  int a = 10, b = 20, c = 30;   printf("/n %d..%d..%d /n", a+b+c, (b = b*2), (c = c*2));   return 0;}

答:輸出將是

110..40..60

這是因為參數都是從右向左處理的,然后打印出來卻是從左向右。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧洲日韩国产| 欧美第一页在线| 亚洲影院色在线观看免费| 一本一本久久a久久精品综合小说| 欧美视频精品一区| 久久国产精品影片| 国产精品一区二区久久国产| 欧美一区二三区| 在线性视频日韩欧美| 国产精品久久不能| 欧美精品videossex88| 欧美亚洲国产精品| 日韩av免费在线| 91中文字幕在线| 国产欧美在线视频| 欧美黄色性视频| 国产精品国产自产拍高清av水多| 成人激情视频小说免费下载| 国内精品久久久久久久| 亚洲3p在线观看| 北条麻妃一区二区三区中文字幕| 精品亚洲一区二区三区| 岛国av午夜精品| 亚洲午夜未删减在线观看| 亚洲国产欧美一区二区三区久久| 在线视频免费一区二区| 色播久久人人爽人人爽人人片视av| 亚洲影视中文字幕| 国产亚洲精品va在线观看| 欧美激情视频免费观看| 国产成人激情小视频| 69视频在线播放| 91精品久久久久久久久| 日韩美女视频免费在线观看| 色婷婷成人综合| 中文字幕亚洲情99在线| 国产婷婷97碰碰久久人人蜜臀| 国内精品免费午夜毛片| 国产精品一区二区三区在线播放| 亚洲成人av片在线观看| 欧美中文字幕在线播放| 欧洲午夜精品久久久| 九九热在线精品视频| 在线观看91久久久久久| 国产精品一区二区av影院萌芽| 91日韩在线视频| 激情成人中文字幕| 亚洲第一国产精品| 国产精品第一页在线| 欧美超级乱淫片喷水| 成人h猎奇视频网站| 国产午夜精品全部视频在线播放| 日本高清视频精品| 亚洲高清久久网| 国内精品久久久| 18久久久久久| 国产精品久久久久久久久久久久久| 亚洲性夜色噜噜噜7777| 亚洲国产精品99久久| 久久久久久久久久婷婷| 亚洲女人被黑人巨大进入| 国内精品久久久久影院优| 久久亚洲精品一区二区| 久久久久久久久久国产| 久久精品中文字幕一区| 2020久久国产精品| 亚洲国产高清高潮精品美女| 日韩最新av在线| 亚洲欧美日韩另类| 一区二区三区在线播放欧美| 欧美日韩中文字幕在线| 亚洲va电影大全| 久久免费视频网站| 亚洲伊人一本大道中文字幕| 国产欧美婷婷中文| 欧美乱大交xxxxx| 欧美电影在线观看网站| 亚洲天堂一区二区三区| 国产亚洲欧美日韩一区二区| 久久午夜a级毛片| 一区二区三区www| 欧美激情国产日韩精品一区18| 北条麻妃一区二区在线观看| 日本亚洲欧洲色α| 国产精品爱久久久久久久| 亚洲奶大毛多的老太婆| 国产精品自产拍高潮在线观看| 欧美怡春院一区二区三区| 国产精品美女久久久久av超清| 992tv成人免费影院| 成人国产在线视频| 成人免费自拍视频| 成人网址在线观看| 亚洲网站视频福利| 97视频在线观看亚洲| 日本精品免费一区二区三区| 亚洲新中文字幕| 亚洲欧美制服中文字幕| 亚洲成人av在线| 日本亚洲欧洲色α| 亚洲欧美日韩图片| 国产主播精品在线| 亚洲成年网站在线观看| 麻豆一区二区在线观看| 日韩中文字幕免费看| 久久av.com| 欧美日韩国产成人在线观看| 亚洲欧美日韩一区二区在线| 国产精品久久久久久久久| 亚洲成人免费在线视频| 亚洲视频第一页| 懂色aⅴ精品一区二区三区蜜月| 欧美成人在线网站| 欧美性视频在线| 久久av红桃一区二区小说| 亚洲午夜精品久久久久久久久久久久| 亚洲电影成人av99爱色| 国产日韩欧美综合| 色婷婷综合成人av| 夜夜狂射影院欧美极品| 日韩电影中文字幕一区| 午夜精品99久久免费| 亚洲国产精品va在线观看黑人| 亚洲一区二区久久| 国产精品免费在线免费| 日韩视频一区在线| 亚洲bt欧美bt日本bt| 亚洲国产中文字幕在线观看| 亚洲第一精品自拍| 亚洲欧美一区二区精品久久久| 国产日韩在线看片| 97超碰蝌蚪网人人做人人爽| 国产va免费精品高清在线| 国产在线不卡精品| 在线观看中文字幕亚洲| 亚洲女成人图区| 欧美日韩另类视频| 亚洲精品999| 欧美肥老太性生活视频| 日本久久久久久久久| 久久久久国产一区二区三区| 伊人一区二区三区久久精品| 国产精品丝袜白浆摸在线| 国产精品美女免费看| 国产在线视频一区| 亚洲免费视频一区二区| 国产97人人超碰caoprom| www亚洲欧美| 国产精品一区av| 欧美剧在线观看| 国产精品久久久久久亚洲影视| 国产精品精品久久久久久| 国产欧美在线观看| 日本精品免费观看| 国产综合久久久久久| www.欧美视频| 大伊人狠狠躁夜夜躁av一区| 亚洲成人性视频| 欧美日韩国产一区二区三区| 亚洲欧美中文日韩在线v日本| 国产精品嫩草影院一区二区| 国产欧美日韩专区发布| 国外成人在线直播| 蜜月aⅴ免费一区二区三区|