2013-06-24 49 views
0

我有一個字符串,它看起來像這樣:打開字符串的第一部分分成若干用C

ATOM 3760 CB GLU乙208 21.707 20.319 45.764 0.0000 2.2350

我從文件中讀取它。

我想將208變成一個int。請注意,該數字可能爲11208,在這種情況下,208之前的兩個空格將被佔用。我正在嘗試以下,但我一直在設置錯誤。思考?

char* line = NULL; 
size_t len = 0; 

int res_num; 

while (getline (&line, &len, fp) != -1) 
{ 

    sprintf(res_num,"%5.1d",atoi(line+22)); 
    printf("%d\n",res); 

} 
+0

你應該分裂您的char *,然後用atoi獲取值 – Alexis

+1

您也可以使用sscanf掃描並拆分字符串。 –

回答

4

你得到一個分割的錯,因爲你傳遞一個未初始化的整數(res_num),其中sprintf()預期目標字符串緩衝區的地址的值。

您可以使用strtol()將字符串轉換爲整數或atoi()。這不是問題,問題在於你的sprintf()調用的隨機存儲器覆蓋。

此外printf()引用未知變量res;你確定上面的代碼甚至編譯?

可以刪除sprintf(),只是使用printf()

printf("found %d\n", atoi(line + 22)); 

或者,當然,存儲在作進一步處理的變量數量:

const int res = atoi(line + 22); 

printf("by the way, res=%d\n", res); 
+0

對不起,printf應該是printf(「%d \ n」,res); – JupiterOrange

+0

printf(「%5.1d \ n」,atoi(line + 22));得到我需要的號碼,但是如何將它分配給一個變量? – JupiterOrange

+2

'res_num = atoi(line + 22);' –