C 设置指针值,之后不进行更改

C 设置指针值,之后不进行更改,c,pointers,strtok,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 4,名称是我在函数中接收到的char*类型 我希望

我正在使用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,名称是我在函数中接收到的char*类型


我希望将名称指定为TCP,即第一个分隔符之前的第一个片段,但由于pch指针继续,因此当pch更改时,名称变量会更改。如何将pch指针值分配给name而不在指针更改时更改它?

您的描述与代码不匹配

您的代码使用strcpy而不仅仅是指针清晰地复制数据。后者看起来像:

if (i == 0)
  name = pch;
但这仍然有效,因为您已将指针复制到第一个标记,并且副本不会更改

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

编辑:哦,正如其他人指出的,你没有增加i,这可能解释了这种奇怪。我不知道为什么会漏掉这个,我想我对描述和代码之间的断开太困惑了。

你从来没有增加过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, " ");
}

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

一旦指定,指针值将被复制,存储的副本将不再更改。顺便问一下,你忘了增加i。其他的是什么[]?请把它也展示出来。哇,这真是个新手的错误。这解决了我的问题!谢谢,我会在几分钟内接受答案。