【发布时间】:2018-04-26 14:42:54
【问题描述】:
我在使用函数strtok() 时遇到了一些问题。
在这个练习中,我的老师要求使用它来标记单个字符串,然后将偶数单词保存在列表中,然后打印所有偶数标记及其出现。但是在我写入输入字符串后程序崩溃了。谁能解释一下问题出在哪里?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define Dim 100
struct node{
int occ;
char sbuffer[Dim];
struct node *next;
};
struct node *first = NULL;
void occorrenze();
void insert(char *tkn);
int main(){
char array[Dim];
char buff[Dim];
char* token;
printf("Insert string: ");
gets(array);
for(token=strtok(array, " ") ; token!=NULL ; token=strtok(NULL," ") ){
if ((strlen(token)%2)==0){
insert(token);
}
}
occorrenze();
}
void insert(char *tkn) {
struct node *new_node;
new_node = (struct node*)malloc(sizeof(struct node));
strcpy(new_node->sbuffer, tkn);
new_node->occ = 1;
new_node->next = first;
first = new_node;
}
void occorrenze() {
struct node *p;
struct node *s;
for(p = first; p != NULL; p = p->next){
for(s = p; s != NULL; s = s->next){
if(strcmp(s->sbuffer, p->sbuffer) == 0){
p->occ++;
}
}
}
printf("\n%s\n%d\n",p->sbuffer, p->occ);
}
(对不起我的英语不好^^)
【问题讨论】:
-
程序在哪里崩溃了?如果您在调试器中运行它,它应该会告诉您这条非常重要的信息,您可以将其添加到您的问题中
-
它在第一个 for 之前在函数 occorrenze() 中崩溃
-
调试器会告诉你代码崩溃的确切行,而不是像你刚刚给我们的那样模糊的东西。