包含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_CHAR
以j = 2;
开头如果
sizeof(temp_array) == 2
以opcode_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]
上以零结尾