2014-11-21 44 views
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); 

可有人引導我朝着正確的方向嗎?這就像我失去了數組指針或其他東西。謝謝您的幫助。

+0

....事實證明,我只是一個假人。我曾有一個 ';'在我的for循環聲明後。現在每個人都可以忽略這個問題 – 2014-11-21 19:46:22

回答

1

我有';'在for循環聲明之後。你不知道我有多愚蠢。

//Trying to print with this format causes a segmentation fault 
for(k=0; k<total; k++); //<-- ';' 
{ 
    printAddress(array[k]); 
} 

應該是:

for(k=0; k<total; k++)// <-- no ';' 
{ 
    printAddress(array[k]); 
} 

5小時後的看着它,我終於看到了它。

相關問題