如何将指针从 strtok 转换为字符串? [关闭]
Posted
技术标签:
【中文标题】如何将指针从 strtok 转换为字符串? [关闭]【英文标题】:How to convert pointers from strtok to strings? [closed] 【发布时间】:2020-03-29 14:55:07 【问题描述】:例如:
int main()
char *str[4];
char data[]="abcd:3:4:5";
str[0]=strtok(data,":");
str[1]=strtok(NULL,":");
str[2]=strtok(NULL,":");
str[3]=strtok(NULL,":");
return 0;
在输入 "abcd:3:4:5"
上,a
是一个字符串,b
c
和 d
是整数。当我使用 strtok() 时,损坏的字符串存储在 4 个指针中(str[0]
到 str[3]
),它们是不可变的。我需要将它们存储在一个数组中,之后我可以更改整数。我会使用atoi()
,但我收到错误'warning: assignment makes pointer from integer without a cast'
。我想将a
,b
,c
e d
存储在一个非指针数组中,以便之后可以更改它们。如何将 char*
转换为 char
(之后我将在字符串上使用 atoi()
来获取整数)。
【问题讨论】:
如果您不显示导致错误的说明,我们将无法帮助您修复它们...函数atoi
可以直接用于从strtok
返回的值。跨度>
你能把代码贴在你使用atoi()
的地方吗?如果我们没有看到它,我们不能说什么。此外,您不会“将字符串存储到指针中”,指针具有存储字符串的地址。
当我使用 strtok() 时,损坏的字符串存储在 4 个指针中(str[0] 到 str[3]),它们是不可变的 你所说的“不变”?这些指针指向您的data
字符串中的内存,而您的data
字符串不是不可变的——如果是,strtok()
将失败。
str[0]
指向可变字符。 str[0][1] = '%';
是合法的。
【参考方案1】:
为了简要回答您的问题,上面的代码应如下所示:
char input[] = "abcd:18:04:12";
char* p1 = strtok(input, ":");
char* p2 = strtok(NULL, ":");
char* p3 = strtok(NULL, ":");
char* p4 = strtok(NULL, ":");
int val1 = atoi(p2);
int val2 = atoi(p3);
int val3 = atoi(p4);
// and now you can do something with val1, val2 and val3
请注意,strtok 将在看到您的某个标记的任何位置放置一个'\0'
字符。如果您打算在之后使用input
字符串,则需要将其副本传递给strtok。
【讨论】:
是的,我的错误是试图将整数存储在 char* 指针中。现在解决了。谢谢:)以上是关于如何将指针从 strtok 转换为字符串? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章