C ++ sscanf空格分隔字符串

时间:2012-09-20 18:38:16

标签: c++

这是我的练习代码:

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 个答案:

答案 0 :(得分:4)

这只读取第一个以空格分隔的字符串:

cin>>input_string;

使用这种方式:

cin>> string_part >> integer_part;

不要将C ++和C方式从流中混合。

您可以使用这种方式读取没有空格分隔的字符串:

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

我可以理解您需要scanf的强大功能来读取给定格式的数据。

答案 1 :(得分:0)

您滥用sizeof。如果你想要1000个字符的空间,你不希望1000本身的大小,你想要1000倍的字符大小。您可以使用1000 * sizeof(char)。由于sizeof返回字符(因此sizeof(char)必须为1),您只需使用1000