我正在学习如何对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);
}
答案 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 num = atoi(n);