尝试将 char[] 传递给 C 中的另一个字符 []

Trying to pass a char[] to another in C

本文关键字:字符 另一个 char      更新时间:2023-10-16

好吧,我不知道在这里做什么:

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++禁止数组分配

显然有更多的代码,但我只是包含了它与错误的关系。我只想按代码对产品名称进行排序。那么,我能在这里做什么呢?

它是在 C 中还是在 C++ 中?

在 C 语言中,你应该使用 strcmp(3) 来比较字符串,使用 strcpy(3) 来复制它们。要非常小心缓冲区溢出(也许使用 strncmpstrncpy 等)。确保所有字符串都以 null 结尾。使用 qsort(3) 进行排序。

在C++中,你应该使用知道<std::string;然后你可以使用std::sort对它们进行排序。如果您使用像 std::set 或 std::map 这样的有序容器,它们将按构造排序。

使用 strcpy 分配char数组

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

对结构数组进行排序时,通常希望交换整个结构,而不仅仅是单个成员。幸运的是,赋值运算符处理结构,即使它们包含数组。因此,如果您这样做,您的排序算法将减少错误:

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

(如何声明temp留给读者练习)

或者,如果允许您使用 c++,您可以

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

请记住,您的排序算法仍然有问题。您应该查找"bubblesort"以查找可以实现的死的简单排序算法。或者更好的是,如果这不是一个练习,请使用现有的实现,如qsortstd::sort

还有另一种方法

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;
       }
 }