【发布时间】:2017-04-07 19:15:07
【问题描述】:
我希望有人可以帮助我编写 C 代码。我收到此错误:
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;
【问题讨论】:
-
strcpy用于复制字符串。您传递的参数不是字符串。memcpy用于复制任意内存。尽管请记住目标必须分配内存。 -
试试
*tmp = SB->jNodes[j]而不是strcpy(tmp, (SB->jNodes[j])) -
我同意@MichaelMior 的评论,即
memcpy()(或memmove())比strcpy()更合适,但更合适的是直接的结构分配。*tmp = SB->nodes[j];等。特别是因为代码iNode *newShadowRoot; strcpy(newShadowRoot, oldRoot);复制到未初始化的指针!