Попытка передать символ [] другому в C

0

Хорошо, я понятия не имею, что здесь делать:

struct
{
       char nombre[30];
       int codigo;     
 }productos[10];

int z = 0;
char tempchar[30]; 

for (z=0; z<9; z++)  {
           if (productos[z].codigo>productos[z+1].codigo) {           
              tempchar = productos[z].nombre;
              productos[z].nombre = productos[z+1].nombre;                  
              productos[z+1].nombre = tempchar;
           }
     }

Появляется следующее сообщение об ошибке: ISO C++ запрещает назначение массивов

Там явно больше кода, но я просто включил то, что он должен делать с ошибкой. Я просто хочу сортировать имена продукта по коду. Итак, что я могу здесь сделать?

  • 0
    Вы не можете назначать массивы в C. Если вы пытаетесь скопировать массив, используйте memcpy() . Если вы хотите, чтобы переменная ссылалась на тот же массив, используйте указатель.
  • 0
    Не используйте не английские идентификаторы в переполнении стека, пожалуйста! И сделайте отступ вашего кода правильно !!!
Показать ещё 1 комментарий
Теги:
arrays
struct
char

4 ответа

4

Это в C или в C++?

В C вы должны использовать strcmp (3) для сравнения строк и strcpy (3) для их копирования. Будьте очень осторожны с переполнением буфера (возможно, используйте strncmp и strncpy т.д.). Убедитесь, что все ваши строки завершены нулями. Используйте qsort (3) для сортировки.

В C++ вы должны использовать std::string которая знает о <; вы можете использовать std :: sort для сортировки. И если вы используете упорядоченные контейнеры, такие как std :: set или std :: map, они будут упорядочены по построению.

2

Использовать strcpy для назначения массивов char

strcpy(tempchar, productos[z].nombre);
strcpy(productos[z].nombre, productos[z+1].nombre);
strcpy(productos[z+1].nombre, tempchar);
0

есть другой способ

struct
{
  char *nombre = (char*)malloc(sizeof(char) * 30);
  int codigo;     
}productos[10];
int z = 0;
char *tempchar = (char*)malloc(sizeof(char) * 30);

for (z=0; z<9; z++)  {
  if (productos[z].codigo>productos[z+1].codigo) {           
          tempchar = productos[z].nombre;
          productos[z].nombre = productos[z+1].nombre;                  
          productos[z+1].nombre = tempchar;
       }
 }
  • 2
    У тебя утечка памяти. char *tempchar = (char*)malloc(sizeof(char) * 30); и затем tempchar = productos[z].nombre;
0

При сортировке массива структур обычно вы хотите поменять всю структуру, а не только один член. К счастью для вас, оператор присваивания работает с структурами, даже если они содержат массивы. Таким образом, ваш алгоритм сортировки будет менее глючным, если вы это сделаете:

temp = productos[z]; 
productos[z] = productos[z+1];
productos[z+1] = temp;

(как объявить temp оставлено как упражнение для читателя)

Кроме того, если вам разрешено использовать c++, вы можете сделать

std::swap(productos[z],productos[z+1]);

Просто помните, ваш алгоритм сортировки по-прежнему неисправен. Вы должны искать "bubblesort" для мертвого алгоритма сортировки, который вы можете реализовать. Или даже лучше, если это не упражнение, используйте существующую реализацию, такую как qsort или std::sort

Ещё вопросы

Сообщество Overcoder
Наверх
Меню