这是我的练习代码:
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
可悲的是,我没有看到问题出在哪里。有人可以帮我这个吗?谢谢
答案 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
。