设置指针值后不进行更改

时间:2012-12-19 13:38:06

标签: c pointers strtok

我正在使用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 4name属于我在函数中收到的char*类型。

我希望将name指定为TCP(即第一个分隔符之前的第一个部分),但由于pch指针继续,name变量会在pch时发生变化变化。如何在指针发生变化时将pch指针值指定给name而不进行更改?

3 个答案:

答案 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, " ");
}