Итак, я отвечаю на несколько практических вопросов для предстоящего выпускного экзамена. и у меня большие проблемы с динамической памятью.
Таким образом, вопрос состоит в том, чтобы в основном проанализировать два разных источника и сравнить их, чтобы найти похожие слова. (один из файла csv и один из ввода cgi)
поэтому я решил использовать malloc/calloc, чтобы поместить строку в каждый слот массива, а затем сравнить каждый слот. но у меня есть некоторые проблемы с моим кодом:
char buffer[100],buffer2[100],tmp[100],line[100];
char *token,*tok,*input;
int main()
{
char s[100]="search=cat+or+dog+store";
char *search=(char*)calloc(10,sizeof(char));
strcpy(buffer,s);
sscanf(buffer,"search=%s",buffer);
int k=0;
tok=strtok(buffer,"+");
while(tok!=NULL)
{
strcpy(&search[k],tok);
k++;
tok=strtok(NULL,"+");
}
printf("%d\n",k);
strcpy(&search[k],"\0");
***printf("%s",&search[0]);
printf("%s",&search[1]);
printf("%s",&search[2]);
printf("%s",&search[3]);***
char* csv=(char*)calloc(10,sizeof(char));
char tmp2[100];
FILE *fp;
fp=fopen("web.csv","r");
while(fgets(line,sizeof(line),fp)!=NULL)
{
strcpy(buffer2,line);
token=strtok(buffer2,",");
while(token!=NULL)
{
strcpy(csv,token);
csv++;
token=strtok(NULL,",");
}
strcpy(csv,"\0");
free(csv);
free(search);
return(0);
}
- часть, которую я поместил между * *, которую я поместил, чтобы проверить, были ли строки помещены внутрь calloc. но ничего не распечатывается или что-то странное распечатывается. тот же код использовался для последней нижней части, и они оба либо пусты, либо только распечатывают странную фрагментированную часть кода.
- когда я помещаю бесплатно (csv) и бесплатно (поиск), он говорит, что «освобождаемый указатель не был выделен». Я просмотрел это, но я не могу найти ответ, почему он это делает?
Спасибо!
sscanf
, если копирование происходит между перекрывающимися объектами, поведение не определено. -buffer
определенно совпадает сbuffer
. - person WhozCraig   schedule 12.08.2016