如何将指针从 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 cd 是整数。当我使用 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 转换为字符串? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将字符串从.csv文件转换为双精度数

strtok() 如何将字符串拆分为 C 中的标记?

strtok用法

Strtok_r 返回 NULL

如何将 atoi 和 strtok 与多维数组一起使用?

如何将“字符串指针”转换为 Golang 中的字符串?