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

首頁 > 編程 > C++ > 正文

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

2020-05-23 14:24:03
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了12個關于C語言編程的有趣問答,有助于讀者加深對C語言程序設計的理解,需要的朋友可以參考下
 
 

本文匯總了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 循環里面那將會造成嚴重的問題

補充: 如果你需要了解更多關于內存泄露的問題,你可以參考這篇文章http://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
欧美日韩激情视频| 国产精品入口日韩视频大尺度| 88国产精品欧美一区二区三区| 中日韩美女免费视频网址在线观看| 午夜精品在线观看| 亚洲精品国产福利| 欧美日韩免费观看中文| 日韩成人av在线| 久久久综合免费视频| 欧美理论在线观看| 日韩欧美亚洲一二三区| 国产欧美在线看| 午夜精品一区二区三区av| 亚洲成年人在线播放| 日韩av片永久免费网站| 九九热精品在线| 日韩免费视频在线观看| 一区二区三区无码高清视频| 国语自产精品视频在线看一大j8| 日韩在线观看视频免费| 91精品国产自产在线观看永久| 精品中文字幕久久久久久| 日韩电影免费观看中文字幕| 久久久精品久久久久| 国产精品99导航| 91精品国产综合久久久久久久久| 国产精品午夜一区二区欲梦| 亚洲第一综合天堂另类专| 日韩亚洲欧美成人| 亚洲区免费影片| 国产亚洲在线播放| 亚洲自拍偷拍一区| 亚州av一区二区| 91在线中文字幕| 国产精品日韩在线观看| 成人精品一区二区三区电影免费| 亚洲精品久久久久久久久久久| 亚洲国产欧美在线成人app| 日本91av在线播放| 青青草原一区二区| 亚洲自拍偷拍第一页| 欧美一级免费视频| 色婷婷综合成人| 国内精品小视频| 成人在线一区二区| 久久久久久国产精品| 亚洲午夜精品久久久久久久久久久久| 九九精品视频在线| 97在线观看免费高清| 国产精品成人久久久久| 精品亚洲aⅴ在线观看| 亚洲成人xxx| 国内精品久久久久伊人av| 亚洲一区二区中文字幕| 亚洲成色777777在线观看影院| 91在线直播亚洲| 91最新在线免费观看| 亚洲国产精品字幕| 国产亚洲成精品久久| 国产精品久久久久久久久借妻| 久久久天堂国产精品女人| 日韩精品一区二区视频| 欧美性jizz18性欧美| 欧美午夜激情小视频| 亚洲全黄一级网站| 日本成人黄色片| 欧美国产亚洲精品久久久8v| 久久久噜噜噜久噜久久| 国产成人福利夜色影视| 精品国产老师黑色丝袜高跟鞋| 色琪琪综合男人的天堂aⅴ视频| 欧美影院成年免费版| 日韩美女视频在线观看| 日韩欧美在线字幕| 日韩有码视频在线| 国产精品日日做人人爱| 欧美亚洲一区在线| 亚洲性xxxx| 精品久久久久久久久久久久久久| 国内外成人免费激情在线视频| 欧洲美女7788成人免费视频| 国产精品私拍pans大尺度在线| 91免费电影网站| 一区二区国产精品视频| 成人精品网站在线观看| 欧美乱大交xxxxx另类电影| 午夜免费在线观看精品视频| 成人国产精品av| 国产中文日韩欧美| 毛片精品免费在线观看| 2018日韩中文字幕| 亚洲天堂色网站| 亚洲日本成人网| 久久久久久久电影一区| 亚洲少妇中文在线| 久久免费福利视频| 日韩电影免费在线观看中文字幕| 欧美成人h版在线观看| 国产一区二区日韩精品欧美精品| 色偷偷噜噜噜亚洲男人| 成人午夜激情网| 欧美日韩国产一中文字不卡| 亚洲美女av黄| 最近免费中文字幕视频2019| 久久影院在线观看| 一区二区三区无码高清视频| 日本在线观看天堂男亚洲| 久久男人资源视频| 日韩免费高清在线观看| 色青青草原桃花久久综合| 亚洲成人xxx| 久久国产精品偷| 日韩男女性生活视频| 亚洲午夜色婷婷在线| 色哟哟入口国产精品| 美女视频久久黄| 国内免费精品永久在线视频| 92看片淫黄大片看国产片| 国产精品美女久久久免费| 日韩欧美中文字幕在线播放| 色综合老司机第九色激情| 国产成人精品在线观看| 成人黄色午夜影院| 在线观看欧美www| 岛国av午夜精品| 久久国产精品久久精品| 国产精品v日韩精品| 成人性生交大片免费看视频直播| 午夜精品在线视频| 久久综合国产精品台湾中文娱乐网| 视频在线观看99| 亚洲已满18点击进入在线看片| 亚洲欧美中文在线视频| 最近日韩中文字幕中文| 黄色成人av网| 色偷偷偷亚洲综合网另类| 亚洲国产成人久久综合一区| 午夜免费在线观看精品视频| 九九九久久国产免费| 国产成人亚洲综合| 亚洲一区二区三区久久| 疯狂蹂躏欧美一区二区精品| 亚洲性夜色噜噜噜7777| 国产精品永久在线| 亚洲第一精品久久忘忧草社区| 久久视频在线免费观看| 欧洲成人性视频| 在线观看欧美日韩| 欧美性猛交xxxx乱大交蜜桃| 国产97色在线|日韩| 国产精品视频专区| 中文字幕精品一区久久久久| 97在线精品国自产拍中文| 欧美裸体xxxx极品少妇| 91精品成人久久| 精品福利免费观看| 日本最新高清不卡中文字幕| 欧美日韩国产综合新一区| 久久成人这里只有精品| 在线看日韩av| 91福利视频在线观看| 亚洲2020天天堂在线观看| 欧美激情视频网| 久久国产精品久久久久|