“strcpy”参数2的不兼容类型
问题描述:
我在跳一个人可以帮我用我的C代码。我得到这个错误:“strcpy”参数2的不兼容类型
error: incompatible type for argument 2 of ‘strcpy’
strcpy(tmp, (SB->jNodes[j]));
这里是我的错误发生在那里代码:
for (int j = 0; j < 20; j++) {
iNode *tmp = malloc(sizeof(iNode));
strcpy(tmp, (SB->jNodes[j]));
if(tmp->size == -1) {
iNode *oldRoot = SB->root;
iNode *newShadowRoot;
strcpy(newShadowRoot, oldRoot);
strcpy(tmp, newShadowRoot);
strcopy(SB->jNodes[j], tmp);
break;
}
free(tmp);
}
这是我的数据结构:
typedef struct iNode
{
int mode;
int id;
int size;
int pointers[NUM_POINTERS];
} iNode;
typedef struct superBlock
{
int magic_number;
int block_size;
int num_blocks;
int num_inodes;
iNode *root;
iNode jNodes[20];
} superBlock;
答
尝试
memcpy(tmp, &(SB->jNodes[j]), sizeof(SB->jNodes[0]));
不是strcpy,因为你没有复制字符串。
'strcpy'用于复制字符串。您传递的参数不是字符串。如果要复制任意内存,则使用“memcpy”。虽然请记住目标必须分配内存。 –
尝试'* tmp = SB-> jNodes [j]'而不是'strcpy(tmp,(SB-> jNodes [j]))' – BLUEPIXY
我同意@MichaelMior的评论:'memcpy()'(或'memmove )')比'strcpy()'更合适,但更合适的是直接结构分配。 '* tmp = SB-> nodes [j];'等。特别是因为代码'iNode * newShadowRoot; strcpy(newShadowRoot,oldRoot);'拷贝到未初始化的指针! –