作者: swagman 時間: 2011-10-29 02:26 標題: [求助]在IAR 5.2 For MSP430上面遇到的問題
本帖最後由 swagman 於 2011-10-29 02:37 編輯
請問有冇師兄遇過同樣問題,在IAR Embedded Workbench IDE裡面,用C語言編程,定義了一個結構體,在Watch窗口看到結構體內一個Array的內容竟然包含了其他member的內容,以致隨後使用atof()函數將String轉為浮點數時得到錯誤的結果。
測試的程式如下:
#include <msp430x16x.h>
#include "stdlib.h"
struct
{
unsigned char Index;
unsigned char Salary[5];
unsigned char WorkDay[2];
}Staff;
float _Salary;
void main(void)
{
Staff.Index = 10;
Staff.Salary[0] = '1';
Staff.Salary[1] = '2';
Staff.Salary[2] = '5';
Staff.Salary[3] = '0';
Staff.Salary[4] = '0';
Staff.WorkDay[0] = '2';
Staff.WorkDay[1] = '5';
_Salary = atof(Staff.Salary);
}
上面的_Salary數值是錯的,正確應為1.2500E+4。
https://www.hkepc.com/forum/attachment.php?aid=1268436&k=1c24311d42ee341a0ab55ad0a431ab69&t=1782866452&sid=1gEqiLPiCIz

作者: 高級嘍囉 時間: 2011-10-29 02:55
回復 1# swagman
試下:
Staff.WorkDay[0] = 'x';
Staff.WorkDay[1] = 'x';
睇下會點。
參考:http://linux.die.net/man/3/atof
http://linux.die.net/man/3/strtol
作者: morris 時間: 2011-10-29 09:49
本帖最後由 morris 於 2024-3-22 04:23 編輯
......
作者: hknightlife 時間: 2011-10-29 13:30
agree. atof 對應string操作的. String (or more precisely, character array, because C does not have String) must be null terminated in C language.
作者: swagman 時間: 2011-10-29 18:40
一言驚醒,忽略了這個問題添,唔該晒師兄.


