1
好吧,所以我是C新手,不知道爲什麼這不起作用。輸出只是說(空)分段錯誤。任何想法,爲什麼我得到分段錯誤?
我有一個結構數組(地址),我已經動態地分配地址結構中包含的指針。我試圖通過街道名稱對地址進行排序,因此我必須通過字符串進行解析並獲取最初空白後面的子字符串。例如:對於'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循環聲明後。現在每個人都可以忽略這個問題 – 2014-11-21 19:46:22