gpt4 book ai didi

c++ - C++ 中的段错误很可能在 strtok 操作中

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:45 24 4
gpt4 key购买 nike

我正在编写一个可以处理多个数字的后缀评估程序。因此,我首先读取字符数组的输入,并将它们拆分为(字符数组)数组。每当我运行我的程序时,它都会出现段错误(Ubuntu 13.10 上的 g++)

这是我要拆分的函数

int split(char str[], char *ret[]){
int c=0;
char * pch;
pch = strtok (str," ");
while (pch != NULL)
{
//printf ("%s\n",pch);
strcpy(ret[c], pch); c++;
//cout<<ret[c];
pch = strtok (NULL, " ");
}
return c;
}

还有我的 main() 的一部分

char* s;
s = new char[200];
cout<<"Enter Postfix Expression:\n > ";
cin.getline(s,200);
char* st[200];
//int size=3;
int size = split(s, st); // < Is what I'm passing correct?

我不明白为什么会发生段错误。有什么建议吗?

编辑感谢yugnum的答案。以下是诀窍

...
ret[c] = new char[strlen(pch)];
strcpy(ret[c], pch); c++;
...

最佳答案

char* st[200];
int size = split(s, st);

int split(char str[], char *ret[]){
...
strcpy(ret[c], pch);
...
}

这是错误的,您只是将一堆未初始化的指针传递给 strcpy,而它需要指向有效分配内存的指针。

关于c++ - C++ 中的段错误很可能在 strtok 操作中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21094340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com