這幾天一直再看《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中編譯通過。