程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 字符串-[c語言]關於 scanf() 和 char數組 的小實驗的問題

字符串-[c語言]關於 scanf() 和 char數組 的小實驗的問題

編輯:編程綜合問答
[c語言]關於 scanf() 和 char數組 的小實驗的問題

寫了三個小的幾乎一樣的test代碼,但是輸出卻不同,不明白為什麼,求大神指點。
全部代碼如下:
#include
void sub1(void);

int main()
{
/*test1*/
sub1();

/*test2 */
char w0[2]={'a','a'};         
char * pc0 = w0;      

printf("\nw1 = %s",w0);   /*wrong*/
printf("\nw1 = %s",pc0);   /*wrong*/

/*test3 */
char w1[2];         
char * pc = w1;  

printf("\n\nInput:");    
scanf("%2s",w1);          /*try input aa*/

printf("\nw1 = %s",w1);   /*right*/
printf("\nw1 = %s",pc);  /*right*/

return 0;

}

void sub1(void)
{
char w1[2];

char * pc = w1;

printf("\nInput:");    
scanf("%2s",w1);          /*try input aa*/

printf("\nw1 = %s",w1);   /*right*/
printf("\nw1 = %s",pc);   /*wrong*/

}
凡是scanf輸入的地方,都是輸入aa,然後回車。請問為何得到的結果,三個都不同。我在注釋裡標明了正常輸出的代碼和錯誤輸出的代碼。理論上3個實驗中,字符串都沒有用\0結尾,那麼為何有些能夠正常輸出?

最佳回答:


題主這個問題問的好,我學的時候就沒有你這麼細心。
觀察一下就會發現,當需要手動輸入2個字符時,最後就不會出錯;
而初始化時賦值2個字符,輸出就會有問題。
我們繼續往後推:在命令行界面賦值和程序初始化賦值有什麼區別?
那就是:初始化只給定字符,沒有輸入結束標志(沒有'\0'),但手動輸入時,我們最後都會敲一個回車鍵('\n'),那麼在這裡,回車就代表了字符數組結束標志。
即便數組大小都被限定,但是字符數組的第一限制不是大小而是結束標志!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved