Здесь как минимум несколько проблем.
0: temp[11]
- двенадцатый элемент массива char, который вы определили как 11 элементов. Это переполнение буфера.
1: names[100][10]
должно быть names[100][11]
, чтобы каждый элемент был достаточно большим для хранения значения из temp
.
2: вы используете strcpy (), а затем вставляете завершающий символ, предположительно, если вы скопировали более 10 символов из strcpy (). В этом случае у вас есть переполнение данных. Вы хотите использовать strncpy (), и затем завершит строку.
strcpy(temp, network[i].name);
temp[11] = '\0';
с
strncpy(temp, network[i].name, sizeof(temp) - 1);
temp[sizeof(temp) - 1] = '\0';
и заменить
strcpy(names[nameCount], network[j].name);
nameCount++;
с
strncpy(names[nameCount], network[j].name, sizeof(names[nameCount] - 1);
names[nameCount][sizeof(nameCount) - 1] = '\0';
nameCount++;
3: цикл, в котором вы печатаете список «и% s», разыменовывает массив, используя неверную переменную. Вы используете итерацию «j», но извлекаете элемент «i».
4: что касается перехода на новую строку, очень вероятно, что network [i] .name (для любого i) содержит символ новой строки, который вы копируете.
5: если у вас есть три вещи из одного и того же места, вы, вероятно, перечислите их так, как вы этого не хотите.
1.1.1.1 chuck
1.1.2.2 larry
1.1.3.3 biff
скорее всего выведет (как только другие ошибки будут исправлены)
chuck and larry and biff are from the same location
larry and biff are from the same location
No matches for biff.
Решение этой проблемы оставлено в качестве упражнения.