c - 在 C 中使用字符串数组时出现分段错误
问题描述
我是 C 的新手,所有这些字符串都非常令人困惑。
这部分程序的目的是将一个字符串拆分为多个字符串,这样我就可以分别处理单词。
int SplitString(char * str, char * pieces[]) {
int i=1;
if ((pieces[0]=strtok(str," \n\t"))==NULL){
return 0;
}
while ((pieces[i]=strtok(str," \n\t"))!=NULL) {
i++;
}
return i;
}
/*****************************************************************************/
void CommandPros(char *str) {
char *pieces[100];
int numW = 0;
for (int i = 0; i < 100; i++) {
pieces[i] = (char *) malloc (100*sizeof(char));
}
numW = SplitString(str, pieces);
}
/*****************************************************************************/
void ReadEnter(char * str) {
fgets(str, 100, stdin);
}
/*****************************************************************************/
int main(){
int fin = 0;
char * strCommand;
strCommand = (char *) malloc (100*sizeof(char));
while (!fin) {
ReadEnter(strCommand);
CommandPros(strCommand);
}
return 0;
}
但是当我执行程序时,会出现此消息:
Segmentation fault: 11
解决方案
您应该使用 NULL 作为从第二次调用开始的第一个参数strtok
代替
while ((pieces[i]=strtok(str," \n\t"))!=NULL)
和
while ((pieces[i]=strtok(NULL," \n\t"))!=NULL)
推荐阅读
- cpu - CPU 速度远低于假定的最低速度——这是硬件故障的迹象吗?
- html - Creating a hover tooltip for SVG elements, using only html and css
- android - Navigation Component in RecyclerView Adapter
- sql - How to update two columns with same name from two tables in a join query
- c# - 设置 Azure 门户以使用 connectionString 作为应用设置,无需代码
- java - Selenium 不会通过 xpath 定位值高于 99 的元素
- ibm-integration-bus - 如何处理发布节点上的 BIP7059 错误“找不到消息元素”
- javascript - 即使我正在使用 Promises,我似乎也无法弄清楚为什么第三个函数在其他两个函数之前运行。我究竟做错了什么?
- python - 单元测试AWS python lambda全局变量补丁不起作用
- angular - Create a component to show input counter (Angular 8)