st中的strtok和int vs char

时间:2014-09-12 13:10:50

标签: c pointers casting strtok

我正在学习如何对char数组进行定界,我需要执行一个操作,将数字和字符串拆分为不同的变量并打印出来。我相信我很接近但是在打印出我的号码时我会得到疯狂的号码。这是int的地址吗?任何意见是极大的赞赏!我的代码和输入/输出:

    #include <stdio.h>

    int main() {
        setbuf(stdout, NULL);
        char name[10];
        printf("Enter in this format, integer:name\n");
        fgets(name, 10, stdin);                            //my input was 2:brandon
        char *n = strtok(name, ":");
        int num = (int)n;
        char * order = strtok(NULL, ":");
        printf("%d,%s", num,order);                        //my output was 7846332,brandon
        return (0);
    }

2 个答案:

答案 0 :(得分:3)

如果你给予,例如"123:foobar"作为输入,指针n指向字符串 "123"。当您将指针强制转换为整数时,整数的值是变量n的值,该变量是strtok返回的字符串在内存中的位置的地址。

如果要将包含数字的字符串转换为实际数字,则应使用例如strtol函数:

int num = strtol(n, NULL, 10);

答案 1 :(得分:3)

此行不正确:

int num = (int)n;
  

这是int的地址吗?

不,它是存储整数字符表示的位置处的字符缓冲区的地址,重新解释为int(即它可能是截断的地址,使其几乎成为无意义的数字)。

您可以通过解析值或使用atoi

将其转换为int
int num = atoi(n);

Demo.