我试图弄清楚如何初始化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};
答案 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;