1

这是我的练习代码:

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

遗憾的是我没有看到问题出在哪里。任何人都可以帮我解决这个问题吗?谢谢你

4

2 回答 2

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以给定格式读取数据的能力。

于 2012-09-20T18:43:39.343 回答
0

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

于 2012-09-20T18:41:39.820 回答