好的,所以我是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循环打印时,我的所有其他排序方法都能正常工作。以下是我在fill数组方法中分配数组和地址行的方法:
/*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 :(得分:1)
我有一个&#39 ;;&#39;在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个小时后,我终于看到了它。