2017-04-07 206 views
0

我在跳一个人可以帮我用我的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; 
+2

'strcpy'用于复制字符串。您传递的参数不是字符串。如果要复制任意内存,则使用“memcpy”。虽然请记住目标必须分配内存。 –

+2

尝试'* tmp = SB-> jNodes [j]'而不是'strcpy(tmp,(SB-> jNodes [j]))' – BLUEPIXY

+1

我同意@MichaelMior的评论:'memcpy()'(或'memmove )')比'strcpy()'更合适,但更合适的是直接结构分配。 '* tmp = SB-> nodes [j];'等。特别是因为代码'iNode * newShadowRoot; strcpy(newShadowRoot,oldRoot);'拷贝到未初始化的指针! –

回答

1

尝试

memcpy(tmp, &(SB->jNodes[j]), sizeof(SB->jNodes[0])); 

不是strcpy,因为你没有复制字符串。

相关问题