2012-09-20 151 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