C++ strtok 无法获得 2 个代币 Borland

发布于 2024-12-12 07:30:13 字数 324 浏览 0 评论 0原文

char *ParseCmdX(char *buf,int len)  
{  
 char *p;  
 p = strtok(buf," ,");  
 p = strtok(NULL," ,");  
 char *ptr = (char *)malloc(strlen(p)+1);  
 strcpy(ptr,p);  
 return ptr;  
}

为什么我在 p = strtok(NULL," ,"); 处收到访问冲突错误? 当我输入 NULL 参数时,它会中断...

buf 类似于“das sdg hfg jgh”

char *ParseCmdX(char *buf,int len)  
{  
 char *p;  
 p = strtok(buf," ,");  
 p = strtok(NULL," ,");  
 char *ptr = (char *)malloc(strlen(p)+1);  
 strcpy(ptr,p);  
 return ptr;  
}

Why am I getting an Access Violation error at p = strtok(NULL," ,"); ?
When I put NULL parameter it breaks ...

buf is smth like "das sdg hfg jgh"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

茶底世界 2024-12-19 07:30:13

你是如何调用这个函数的,buf是如何分配的?请记住 buf 不能是只读的或常量(strtok 在调用时更改输入缓冲区)。

这是可行的,因为 x 是可变的:

  char x[] = "das sdg hfg jgh";
  char *c = ParseCmdX(x, strlen(x));

但是,这会出现段错误:

   char *y = "das sdg hfg jgh";
   char *c = ParseCmdX(y, strlen(y));

How are you calling this function, and how is buf allocated? Remember buf cannot be read-only or const (strtok changes the input buffer as it's called).

This works, because x is changable:

  char x[] = "das sdg hfg jgh";
  char *c = ParseCmdX(x, strlen(x));

This, however, seg faults:

   char *y = "das sdg hfg jgh";
   char *c = ParseCmdX(y, strlen(y));
掩饰不了的爱 2024-12-19 07:30:13

您必须检查对 strtok 的第一次调用,即 strtok(but, " ,") 是否返回 NULL,如果是,则对 strtok 的下一次调用将终止。您具体传递给 buf 中的 ParseCmdX 的是什么?

You have to check and see if the first call to strtok, namely, strtok(but, " ,") returned NULL or not, if it did then the next call to strtok will die. what specifically are you passing to the ParseCmdX in buf?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文