在C中初始化字符指针数组

时间:2016-09-24 16:12:12

标签: c arrays pointers struct

我试图弄清楚如何初始化char *数组。我定义了一个具有char *[100]属性的结构。当我为该属性分配了一个字符串数组时,我得到了如下所示的错误:

#include <stdio.h>
#include <stdlib.h>

#define MAXHIST 100
struct rec
{
    int i;
    float PI;
    char A;
    char *arguments[MAXHIST];
};

int main()
{
    const char name[5] = "-aefa";
    struct rec ptr_one;
    // struct rec ptr_one;
    (ptr_one).i = 10;
    (ptr_one).PI = 3.14;
    (ptr_one).A = 'a';
    (ptr_one).arguments = { "/bin/pwd", 0};

    printf("First value: %d\n",(ptr_one).i);
    printf("Second value: %f\n", (ptr_one).PI);
    printf("Third value: %c\n", (ptr_one).A);

    // free(ptr_one);

    return 0;
}

编译期间产生的错误是:

hmwk1-skk2142(test) > cc test.c
test.c: In function ‘main’:
test.c:23:27: error: expected expression before ‘{’ token
     (ptr_one).arguments = { "/bin/pwd", 0};

2 个答案:

答案 0 :(得分:1)

在C中使用索引为数组赋值:

ptr_one.arguments[0] =  "/bin/pwd";

另外:

const char name[5] = "-aefa";

错了。对于字符串末尾的0字节,数组需要是一个更大的项。使它长6个项目,甚至更好:

const char * name = "-aefa";

答案 1 :(得分:0)

在这一行:

(ptr_one).arguments = { "/bin/pwd", 0};

您将数组赋值与数组初始化混淆。实际上,在报告的行中,您尝试将多个值分配给一个指针。

在数组的初始化阶段,你可以做的是(通过尊重数组初始化语义和数组语法)。

e.g。

int a[3] = {1, 2, 3};

否则,如果要使用指针表示法为数组的某个元素赋值,则可以使用类似于以下代码的内容:

// assign to a[1] the value 42
*(a + 1) = 42;