包含struct node{... char opcode_CHAR[6]; }

声明为struct node *pointer2的指针指向该结构类型的节点;

得到一个char temp_array[6]

j = 6 - sizeof(temp_array);


因此,根据sizeof(temp_array)
我将复制到j的某个索引opcode_CHAR
如果sizeof(temp_array) == 4错误复制到opcode_CHARj = 2;开头
如果sizeof(temp_array) == 2opcode_CHAR开头的副本复制到j = 4;等)

我收到编译警告:


  警告:传递“ strcmp”的参数1会使指针从整数开始
  没有强制转换[-Wint-conversion]


因此:strcpy(pointer2->opcode_CHAR[j], temp_array);

我在pointer2->opcode_CHAR = pointer2->opcode_CHAR[j];之前尝试了strcpy(pointer2->opcode_CHAR, temp_array);,以便它指向所需的索引j,而不是数组的开头。但这没有用。

我应该这样添加j吗? strcpy(pointer2->opcode_CHAR+j, temp_array);

最佳答案

strcpy需要两个指针。

opcode_CHAR[j]等效于*(opcode_CHAR+j),它是值而不是指针。

这就是为什么pointer2->opcode_CHAR = pointer2->opcode_CHAR[j];无法正常工作的原因,您为数组的指针分配了一个值。幸运的是,编译器应该告诉您该数组是只读的,因为如果您以后尝试访问该数组,将会造成很大的麻烦。

要获得指向您想要的值的指针,您可以按照建议的方式执行opcode_CHAR+j或选择我喜欢的&opcode_CHAR[j],因为它更明显。

显然,您必须从结构中获取属性,因此必须在取消引用之前进入数组:

&(pointer2->opcode_CHAR[j])

这样就可以了。

strcpy(pointer2->opcode_CHAR+j, temp_array);

要么

strcpy(&(pointer2->opcode_CHAR[j]), temp_array);

请确保您的char数组在opcode_CHAR[5]上以零结尾

10-08 04:11