0

我正在使用该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,并且namechar*我在函数中收到的类型。

我希望分配nameTCP(即第一个分隔符之前的第一部分),但是由于 pch 指针继续,name变量在更改时pch会更改。如何在指针更改时分配pch指针值name而不更改它?

4

3 回答 3

3

你忘了我++。你永远不会增加 i。

于 2012-12-19T13:40:46.560 回答
2

您的描述与您的代码不符。

您的代码清楚地使用 复制数据(字符)strcpy(),而不仅仅是指针。后者看起来像:

if (i == 0)
  name = pch;

但这仍然有效,因为您已将指针复制到第一个标记,并且副本不会更改。

others另一方面,如果循环后内容发生变化,则数组是有风险的,text因为您只存储指针。

编辑:D'oh,正如其他人指出的那样,您没有增加i,这可能解释了这种奇怪之处。不知道为什么我错过了这个,我想我对描述和代码之间的脱节感到很困惑。

于 2012-12-19T13:39:49.910 回答
2

您永远不会递增i,因此每个循环最终都会复制pchinto的最新值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, " ");
}
于 2012-12-19T13:40:42.387 回答