Отсортировать строки! Где ошибка? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нужна помощь. Нужно написать код для сортировки строк, с клавиатуры вводится наименование города и популяция. Задача отсортировать в алфавитном порядке города. Вот сам код в СИ.
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "struct.h"
  4.  
  5. void inputTown(struct town*pt);
  6. void printTown(struct town*pt);
  7. void sortTown(struct town*pt);
  8. int main(int argc, char**argv)
  9. {
  10. struct town Towns[10];
  11. for(int i = 0; i < 10; i++){
  12. inputTown(&Towns[i]);
  13. }
  14. sortTown(&Towns);
  15. for(int i = 0; i < 10; i++){
  16. printTown(&Towns[i]);
  17. }
  18. getchar();
  19. return 0;
  20. }
  21. void inputTown(struct town*pt)
  22. {
  23. printf("Input netx town.\n");
  24. printf("Name: ");
  25. gets_s(pt->name, NAMELENGHT);
  26. printf("Population: ");
  27. scanf_s("%d", &pt->population);
  28. getchar();
  29. return;
  30. }
  31. void printTown(struct town*pt)
  32. {
  33. printf("town: %s, population:%d\n", pt->name, pt->population);
  34. }
  35. void sortTown(struct town*pt)
  36. {
  37. char tmp[80];
  38. char*ptr = tmp;
  39. for (int i = 0; i < NAMELENGHT - 1; i++) //сортировка выбором
  40. for (int j = i; j < NAMELENGHT; j++) {
  41. if (strcmp(pt[i].name, pt[j].name) > 0)
  42. {
  43. *ptr = pt[i].name;//[80]
  44. int x = pt[i].population;
  45. strncpy_s(pt[i].name, NAMELENGHT, pt[j].name, strlen(pt[j].name));
  46. pt[i].population = pt[j].population;
  47. strncpy_s(pt[j].name, NAMELENGHT, ptr, strlen(ptr));
  48. pt[j].population = x;
  49. }
  50. }
  51. }
собственно вроде ошибка где то в функции sortTown, либо может неверно аргумент отправляю в функцию. Подскажите где ошибка пожалуйста.

Решение задачи: «Отсортировать строки! Где ошибка?»

textual
Листинг программы
  1. *ptr = pt[i].name;  // 54 строка

Объяснение кода листинга программы

В данном коде происходит следующее:

  1. Строка 54: Переменная *ptr инициализируется значением pt[i].name.
    • Это предполагает, что pt[i] является допустимым указателем на структуру или объект, и что у этой структуры или объекта есть член с именем name.
    • Значение pt[i].name будет копироваться в *ptr.
    • Если pt[i] не является допустимым указателем или у него отсутствует член с именем name, это может вызвать ошибку во время выполнения. Код не содержит достаточной информации для определения, что именно вызывает ошибку. Необходимо проверить, является ли pt[i] допустимым указателем и есть ли у него член с именем name.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы