作者s58460 (小董)
看板EE_DSnP
標題[討論] 一個假設(atof和char array)
時間Sun Nov 2 00:59:56 2008
發現喔...
使用「atof」來轉換成"int"就得必須使用"char" Type的Array
(不知道還有沒有其它方法?)
如果存入太多數字時
下一次atof的使用會把「這次輸入的」和「輸入時沒覆蓋到的(後面的數字)」一起轉入int
比方說:
經過的第一個cin的loop輸入了12345
...
charA[5] = {'1', '2', '3', '4', '5'};
intB = atof(charA);
...
這樣 intB = 12345
但經過了第二個cin的lopp輸入了50
...
charA[5] 會變成 {'5', '0', '3', '4', '5'};
intB = atof(charA);
...
這樣 intB = 50345
跟預期的不一樣...
如果在輸入第二次之前用一個loop把char type的array全部重置成→'\n'
就可以解決此問題
其實我是想問在「int main」中
...
string A = "1";
int B = atof(A);
...
這樣compile好像會出現錯誤訊息耶???
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.242.30
1F:推 timrau:int B = atof(A.c_str()); 11/02 01:03
2F:推 ric2k1:記得字串結尾要補 0 11/02 01:27
3F:推 wintercobra:string A這個動作不就自動補上'\0'了嗎? 11/02 19:51
4F:推 ric2k1:Compile 錯誤訊息是因為如同一樓所說之原因, 11/02 20:35
5F:→ ric2k1:要加 0 char type array 才不會重複. 11/02 20:36
6F:推 wintercobra:我上網查了一下c_str()的功用,但還是不太懂 11/02 20:42
7F:→ wintercobra:他是用來在字串尾幫你補上'\0'的嗎? 11/02 20:43
8F:→ wintercobra:至於那個compile error,不是string A時就加上'\0'了? 11/02 20:44
9F:→ wintercobra:那atof(A)應該沒有問題呀,什麼不會重複? 11/02 20:45
10F:推 timrau:c_str()是用來生出一個const char*好讓處理char*的舊func. 11/02 21:12
11F:→ timrau:使用 11/02 21:12
12F:推 wintercobra:是因為atof並不認得string,所以給他字元陣列來處理? 11/02 22:14
13F:推 ric2k1:是的 11/03 00:00