首页 > 解决方案 > 在 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

标签: carraysstringsegmentation-fault

解决方案


您应该使用 NULL 作为从第二次调用开始的第一个参数strtok

代替
while ((pieces[i]=strtok(str," \n\t"))!=NULL)


while ((pieces[i]=strtok(NULL," \n\t"))!=NULL)


推荐阅读