2012-09-20 153 views
1

這裏是我的做法代碼:C++ sscanf的空間分隔字符串

int integer_part; 

char* string_part = (char*)malloc(sizeof(1000)); 

char* input_string = (char*)malloc(sizeof(1000)+sizeof(int)); 

cin>>input_string; 

sscanf(input_string, "%s %d", string_part, &integer_part); 

printf("scan: %s %d", string_part, integer_part); 

我使用這個代碼,以輸入像abc 2012但結果將是abc 0

可悲的是,我沒有看到哪裏出了問題是。任何人都可以幫我一下嗎?謝謝

+2

'CIN >> input_string'只會在你的'input_string'把'abc'。使用'getline'。 – jxh

+0

'的sizeof(1000)''是的sizeof(int)的',通常4. –

+4

一邊從CIN這不是C++,這爲c。不要使用malloc/free使用new/delete。不要用printf,使用COUT,並且不使用sscanf的使用stringstreams終於不使用的char *使用的std :: string – Borgleader

回答

4

此只讀取第一個空間分隔的字符串:

cin>>input_string; 

用這樣的方式:

cin>> string_part >> integer_part; 

不要混合使用C++和從流讀取Ç方式。

您可以用這種方式沒有分隔空間讀字符串:

cin.read (input_string, sizeof(1000)+sizeof(int) - 1); 
size_t read_Len = cin.gcount(); 
input_string[read_Len] = '\0'; 

我能理解你需要的scanf電源在給定的格式讀取數據。

0

你濫用sizeof。如果你想要1000個字符的空間,你不需要1000個字符的大小,你需要1000個字符的大小。您可以使用1000 * sizeof(char)。由於sizeof返回字符(因此sizeof(char)必須是1),你可以只使用1000