關於變量的類型與變量初始化的一點思考

這幾天一直再看《C primer plus》,然後寫一些書上習題的小程序。在調試的過程中遇到一些問題。

 

詳見圖片。

 

大家注意,在調試過程中,遇到了一個警告提示。

Run-time Check Failure #2 - Stack around the variable 'ch_ascll' was corrupted

根據我超爛的英語知識+金山詞霸的單詞翻譯和我的主觀臆測,得到的結論是這段話的意思是說:在運行時檢查變量數據在堆棧存儲的範圍發生異常。

我們現來看看代碼:

 

// 3.11-2解答.cpp : 定義控制檯應用程序的入口點。
//題目:要求輸入一個ASCII碼值,輸出相應的字符 buy Bugsong
//作者blog:blog.csdn.net/bugsonglinux

#include "stdafx.h"
#include "stdio.h"

int _tmain(int argc, _TCHAR* argv[])
{
       char ch_ascii;
       ch_ascll = 0;
       printf("請輸入一個ASCLL數值:/n");
       scanf("%u",&ch_ascll);
       printf("對應的字符是:%c",ch_ascll);
       return 0;
 
}

在這段小代碼中定義的變量爲char,但是在輸入函數scanf中輸入的數據類型說明符爲%u(無符號十進制數)。

我想出現問題是在輸入的是十進制數,但是變量的類型爲char字符型,在內存空間的分配上出現了問題。還有就是ch_ascll變量在沒有賦值進行初始化的時候還有一個警告,這個我忘記截圖了。因爲在程序的運行過程中變量會被隨意賦值。

再來看張截圖:

這個也是變量的類型問題,但是我不理解的是年齡是一個很小跨度的單位,小於200,對吧?這樣用short int是很好的,但是用這個數據類型就是不行,可能是機器字長的問題吧,編譯環境和硬件環境讓short int和int都是32位的數據。所以會有相應的警告吧。

 

修改後的代碼:

 

// 3.11-2解答.cpp : 定義控制檯應用程序的入口點。
//題目:要求輸入一個ASCII碼值,輸出相應的字符 buy Bugsong
//作者blog:blog.csdn.net/bugsonglinux

#include "stdafx.h"
#include "stdio.h"

int _tmain(int argc, _TCHAR* argv[])
{
         int ch_ascii;
         ch_ascll = 0;
         printf("請輸入一個ASCII數值:/n");
         scanf("%u",&ch_ascii);
         printf("對應的字符是:%c",ch_ascii);
         return 0;
 
}


// 3.11-5解答.cpp : 定義控制檯應用程序的入口點。
//題目:一年約有3.156*10^7s,輸入年齡。換算成秒數
//作者blog:blog.csdn.net/bugsonglinux
//輸入爲short int 整形 輸出爲double浮點型數據

#include "stdafx.h"
#include "stdio.h"
#define TIME 31560000 //常量定義

int _tmain(int argc, _TCHAR* argv[])
{
        int i_age;
        double d_agetime;
        i_age = d_agetime = 0;  //初始化變量
        printf("請輸入您的年齡:");
        scanf("%u",&i_age);
        d_agetime = i_age * TIME;
        printf("您的年齡轉換爲秒爲:%f",d_agetime);
        return 0;
}

以上就是我的一點思考,有不對的地方歡迎大家拍磚!!兩段代碼在win7+vs2008以及winxp sp3+vs2008中編譯通過。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章