Я знаю, что если я хочу сравнить две структуры, я должен написать это для себя, потому что для этого нет никакой функции, но я не могу понять, как мне это сделать. У меня есть три структуры: первичная, вторичная и разностная (в ней должны быть разные элементы). Все три имеют следующие члены: char * имя файла, char * размер, int размер.
Все, что мне нужно, это те предметы, которые не находятся во вторичной структуре, или если они есть, тогда они нужны мне, только если их размер больше размера вторичной структуры. Надеюсь, ты понимаешь, чего я хочу. Мой английский не самый лучший, извините за это.
Вот что я попробовал:
j = 0;
x = 0;
for ( i = 0; i < primarypcs; )
{
memset( tmp, 0, sizeof( tmp ) );
l = 1;
for ( k = 0; k < strlen( primary[i].filename );k++ )
{
tmp[k] = primary[i].filename[l];
l++;
}
tmp[k]='\0';
memset( buf, 0, sizeof( buf ) );
l = 1;
for ( k = 0; k < strlen( secondarystruct[j].filename ); k++ ) //<-- here is where my program freezes
{
buf[k] = secondarystruct[j].filename[l];
l++;
}
buf[k]='\0';
if ( ( stricmp( tmp, buf ) == 0 ) && ( x == 0 ) )
{
if ( primary[i].intsize > secondarystruct[j].intsize )
{
difference[diff].filename = strdup( primary[i].filename );
difference[diff].size = strdup( primary[i].size );
difference[diff].intsize = -1;
diff++;
i++;
if ( j == secondarypcs ) x = 1;
else j++;
}
else if ( x == 0 )
{
i++;
if ( j == secondarypcs ) x = 1;
else j++;
}
}
else
{
difference[diff].filename = strdup( primary[i].filename );
difference[diff].size = strdup( primary[i].size );
difference[diff].intsize = -1;
diff++;
i++;
}
}
Пожалуйста, скажите мне, что я делаю неправильно!
Спасибо, Кампи
Обновление:
Извините, кажется, я дал вам недостаточно информации.
Итак: обе структуры содержат список файлов с разных дисков, таких как «C: \» и «D: \». Это причина, почему я не могу использовать просто простой strcmp, потому что первая буква всегда будет отличаться. Вот почему я должен «отрезать их», а затем сравнить. Эта программа должна работать следующим образом: она извлекает список файлов из c: \, а затем извлекает список файлов из d: \ и затем сравнивает их. Если для файла, находящегося в каталоге c: \, не существует в d: \, его следует скопировать туда, если в каталоге d: \ есть файл, которого не существует в c: \, то его следует игнорировать (я не не хочу ничего с этим поделать). Если файл, который также находится в c: \ и d: \, я не хочу копировать его только тогда, если файл из c: \ имеет больший размер, чем файл, находящийся в d: \
Надеюсь, теперь ты понимаешь, чего я хочу.