2

这是我的代码:

char str[] ="";
scanf("%s",&str);
char * pch;
pch = strtok (str,"#");
printf ("%s\n",pch);
return 0;

我需要将“1#2#3”的输入渲染为第一个、第二个和第三个三个整数。我上面的代码只处理第一个变量并打印第一个字符串“1”,但我想将它保存到一个 int 变量中。

我试过:

int first = atoi(&pch)

但是“第一个”得到的值是 0 而不是 1。如何将数组 char 的指针解析为 int?

4

4 回答 4

4

该代码具有未定义的行为,因为str不足以处理任何输入。str最多可以容纳 1char并且scanf()在读取字符串时会附加一个空终止符。如果用户输入单个字符并点击返回,scanf()则将超出范围写入数组str

要更正,请确定可接受的最大字符串长度,并scanf()通过阅读更多内容来防止:

char str[1024];
if (1 == scanf("%1023s", str))
{
}

请注意,这atoi()会产生0for invalid input 或 for的结果"0",这是没有帮助的。改用strtol()或查看dasblinkenlight的答案以获得更简单的解决方案。

于 2012-10-24T13:16:01.897 回答
4

如果您知道输入的精确布局,以及ints 的确切数量,您可以大大简化此过程:

scanf("%d#%d#%d", &a, &b, &c);

这是ideone 上演示的链接

于 2012-10-24T13:16:20.520 回答
1

您将 a 传递char*给 atoi(),而不是char**. 只需将其称为atoi(pch)

于 2012-10-24T13:16:14.203 回答
0

您已将 str 声明为 char str[] ="";。这将只分配一个字节给 str。是否正常工作。我希望我不会在这里错过任何东西。
至于strtok,需要在while循环中使用
pch = strtok (str,"#");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, "#");
}

于 2012-10-24T13:17:51.163 回答