麻烦在C中将Char *复制到Char *

时间:2014-02-18 18:20:33

标签: c arrays pointers char

我有以下程序我正在尝试运行但当然,由于我缺乏良好的知识,我的程序崩溃运行时:

#include <stdio.h>
#include "ptref.h"

mystruct_t    *FRSt = NULL;

int main(int argc, char* argv[])
{
    char ct[2] = {0, 1, '\0'};
    char dd[2] = {0, 1, '\0'};


    populate_contents(FRSt, 2, "FRES", ct, dd);


    return 0;

}

HEADER

/*
 * ptref.h
 *
 */

#ifndef PTREF_H_
#define PTREF_H_

typedef struct mystruct
{
    char* ct[2];    //
    char* dd[2];  // = "0\0";
    char* name[]; // = "1\0";
} mystruct_t;

extern mystruct_t p;

void populate_contents(mystruct_t* mystruct_var, int arrSize, char* name[], char* dd[], char* ct[])
{
    /* Initialise arrays */
    int i;

    i = 0;
    strncpy(mystruct_var->name, name, sizeof(name));


    for (i = 0; i < arrSize; i++)
    {
        mystruct_var->dd[i] = dd[i];
        mystruct_var->ct[i] = ct[i];
    }

    return;
}




#endif /* PTREF_H_ */

因为我要在实时计算机中实现这一点,我不确定使用malloc是否会给我带来麻烦。但是,我有一种感觉,因为我没有使用malloc作为我的mystruct_var指针,我遇到了麻烦,或者可能是我的愚蠢代码。无论如何,进一步的教育和建议将受到高度赞赏。

P.S。我已经查看过其他相关帖子,但我的问题却完全不同了。所以,我提出了一个新问题。

1 个答案:

答案 0 :(得分:1)

首先,在main() char ct[2] = {0, 1, '\0'};中,由于您已将数组大小定义为2并初始化3数组元素,因此此特定数组初始化不正确。

在函数populate_contents(FRSt, 2, "FRES", ct, dd);中,第三个参数是一个字符串,相应的被调用函数参数应该是char数组char name[]或char指针char *name。它不应该像您将name定义为指针数组char *name[]那样。通过ct&amp;的论据也是如此。 dd,它们应该只是被调用函数中的char指针,因为类型为char *

通过查看您对成员元素的使用方式,您声明的结构mystruct_t也是错误的。

正如Grijesh所说,sizeof(name)是你不想要的,因为name是一个可能是4或8字节的指针,所以利用strlen()得到长度你收到的字符串。