【问题标题】:incompatible type for argument 2 of ‘strcpy’“strcpy”的参数 2 的类型不兼容
【发布时间】: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-&gt;jNodes[j]而不是strcpy(tmp, (SB-&gt;jNodes[j]))
  • 我同意@MichaelMior 的评论,即memcpy()(或memmove())比strcpy() 更合适,但更合适的是直接的结构分配。 *tmp = SB-&gt;nodes[j]; 等。特别是因为代码 iNode *newShadowRoot; strcpy(newShadowRoot, oldRoot); 复制到未初始化的指针!

标签: c strcpy


【解决方案1】:

试试

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2018-02-27
    • 2014-06-23
    • 1970-01-01
    • 2018-09-07
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多