我正在使用strtok
函数读取一个以空格作为分隔符的字符串。
我的代码如下所示:
char * pch = strtok (text," ");
int i = 0;
while (pch != NULL)
{
if (i == 0)
strcpy(name, pch);
else
others[i - 1] = pch;
pch = strtok (NULL, " ");
}
字符串如下所示:TCP 1 2 3 4
,name
属于我在函数中收到的char*
类型。
我希望将name
指定为TCP
(即第一个分隔符之前的第一个部分),但由于pch指针继续,name
变量会在pch
时发生变化变化。如何在指针发生变化时将pch
指针值指定给name
而不进行更改?
答案 0 :(得分:3)
你忘了我++。你永远不会增加我。
答案 1 :(得分:2)
您的说明与您的代码不符。
您的代码清楚地使用strcpy()
复制数据(字符),而不仅仅是指针。后者看起来像:
if (i == 0)
name = pch;
但是这仍然可以,因为你已经将指针复制到了第一个标记,副本也不会改变。
另一方面,如果others
的内容在循环之后发生变化,那么text
数组会有风险,因为那里只存储指针。
编辑:D'哦,因为其他人指出我们你没有增加i
,这可能解释了这种陌生感。不知道为什么我错过了这个,我想我对描述和代码之间的脱节感到困惑。
答案 2 :(得分:2)
您永远不会增加i
,因此每个循环最终都会将pch
的最新值复制到name
。
您可以通过为循环的每次迭代递增i
来修复它:
char * pch = strtok (text," ");
int i = 0;
while (pch != NULL)
{
if (i++ == 0) // ++ is the only change from your code
strcpy(name, pch);
else
others[i - 1] = pch;
pch = strtok (NULL, " ");
}