试图在C中将char []传递给另一个

时间:2013-11-02 22:02:04

标签: c++ c arrays struct char

好的,我不知道该怎么做:

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

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

4 个答案:

答案 0 :(得分:4)

是C还是C ++?

在C语言中,您应该使用strcmp(3)来比较字符串,并使用strcpy(3)来复制字符串。要非常小心buffer overflow(也许使用strncmpstrncpy等......)。确保所有字符串都以空值终止。使用qsort(3)进行排序。

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

答案 1 :(得分:2)

使用strcpy分配char数组

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

答案 2 :(得分:0)

排序结构数组时,通常需要交换整个结构,而不只是单个成员。幸运的是,即使它们包含数组,assignement运算符也可以处理结构。因此,如果您执行此操作,您的排序算法将减少错误:

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

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

或者,如果允许使用c ++,则可以执行

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

请记住,您的排序算法仍然存在问题。您应该查找“bubblesort”以获得可以实现的简单排序算法。或者甚至更好,如果这不是练习,请使用现有的实施,例如qsortstd::sort

答案 3 :(得分: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;
       }
 }