char数组的指针到c中的整数

时间:2012-10-24 13:13:46

标签: c atoi

这是我的代码:

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

答案 0 :(得分:4)

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

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

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

请注意,atoi()会因无效输入或0而产生"0"的结果,这对您没有帮助。请改用strtol()或查看dasblinkenlight的答案,以获得更简单的解决方案。

答案 1 :(得分:4)

如果您知道输入的精确布局以及int的确切数量,则可以大大简化:

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

这是link to a demo on ideone

答案 2 :(得分:1)

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

即可

答案 3 :(得分:0)

您已将str声明为char str [] =“”;。这将只为str分配一个字节。 它运作正常吗?我希望我在这里不会遗漏一些东西。
至于strtok,你需要在while循环中使用它 pch = strtok (str,"#");
  while (pch != NULL)
 {
    printf ("%s\n",pch);
pch = strtok (NULL, "#");
 }