ОК, поэтому я новичок в C и не могу понять, почему это не сработает. Результат - это просто ошибка (null) сегментации.Любая идея, почему я получаю ошибку сегментации?
У меня есть массив структур (адрес), который я динамически выделяю вместе с указателями, содержащимися в адресных структурах. Я пытаюсь сортировать адреса по названиям улиц, поэтому мне приходится разбираться по строке и получать подстроку, которая появляется после начального пробела. Например: для «123 Anywhere St.» мне нужно получить подстроку «Anywhere St.», для сравнения этих строк для сортировки.
Что я делаю неправильно, что может быть причиной этого?
/*Prints the array sorted from a-z by street name*/
void printStreetSortedArray(Address * array, int total)
{
int i;
int j, k, z;
char temp1[256], *sub_string1;
char temp2[256], *sub_string2;
Address tmpAdd;
for(i=0; i<total-1; i++)
{
for(j=i+1; j<total; j++)
{
//Get the two substrings (street names) for comparison
strcpy(temp1, array[i].street);
z = 0;
while(temp1[z] != ' ')
{
z++;
}
sub_string1 = temp1+z+1;
strcpy(temp2, array[j].street);
z = 0;
while(temp2[z] != ' ')
{
z++;
}
sub_string2 = temp2+z+1;
//Compare street names and swap addresses
if(strcasecmp(sub_string2, sub_string1) < 0)
{
tmpAdd = array[i];
array[i] = array[j];
array[j] = tmpAdd;
}
}
}
//If I print using this format, it will work correctly
/*printAddress(array[0]);
printf("\n");
printAddress(array[1]);
printf("\n");
printAddress(array[2]);
printf("\n");*/
//Trying to print with this format causes a segmentation fault
for(k=0; k<total; k++);
{
printAddress(array[k]);
}
}
Все мои другие методы сортировки отлично работают при печати с использованием цикла for. Вот как я выделил массив и адрес строки в моем методе заполнения массива:
/*Allocate memory for array of Addresses*/
myAdd = (Address*)malloc((*total)*sizeof(Address));
и:
fgets(line, sizeof(line), fin);
line_length = strlen(line);
line[line_length-1] = '\0'; line_length--;
myAdd[i].street = malloc(line_length+1);
strcpy(myAdd[i].street, line);
Может кто-нибудь порулить меня в правильном направлении? Это похоже на то, что я потерял указатель на массив или что-то в этом роде. Спасибо за помощь.
.... И получается, что я просто манекен. У меня есть ';' после объявления for for for. Теперь все могут игнорировать этот вопрос. –