结构指针 #包括 INTC; int main() { 结构abc{ int*a; char*ch[10]; }; 结构abc obj1; 结构abc*obj; obj=&obj1; 扫描频率(“%d”,obj->a); printf(“\nY”); scanf(“%s”,&obj->ch); printf(“\nY”); 返回0; }

结构指针 #包括 INTC; int main() { 结构abc{ int*a; char*ch[10]; }; 结构abc obj1; 结构abc*obj; obj=&obj1; 扫描频率(“%d”,obj->a); printf(“\nY”); scanf(“%s”,&obj->ch); printf(“\nY”); 返回0; },c,C,我正在fedora上使用VIM编辑器和Gcc编译器。。 我得到了一个分段错误(内核转储???)//这是什么意思???“分段错误”意味着你的程序试图访问不允许访问的内存。您的程序有几个指针和初始化错误 我想您希望数组是char-ch[10],而不是char*ch[10]。您还需要更改scanf()调用以匹配:scanf(“%s”,obj->ch) 这同样适用于a字段。它可能不是指针,您应该将指针传递到scanf(): “分段错误”表示您的程序试图访问不允许访问的内存。您的程序有几个指针和初始化错误

我正在fedora上使用VIM编辑器和Gcc编译器。。 我得到了一个分段错误(内核转储???)//这是什么意思???“分段错误”意味着你的程序试图访问不允许访问的内存。您的程序有几个指针和初始化错误

我想您希望数组是
char-ch[10]
,而不是
char*ch[10]
。您还需要更改
scanf()
调用以匹配:
scanf(“%s”,obj->ch)

这同样适用于
a
字段。它可能不是指针,您应该将指针传递到
scanf()

“分段错误”表示您的程序试图访问不允许访问的内存。您的程序有几个指针和初始化错误

我想您希望数组是
char-ch[10]
,而不是
char*ch[10]
。您还需要更改
scanf()
调用以匹配:
scanf(“%s”,obj->ch)

这同样适用于
a
字段。它可能不是指针,您应该将指针传递到
scanf()

我得到了一个分段错误(核心转储???//这是什么意思

执行内存访问冲突的变量会导致分段错误

scanf("%d", &obj->a);
scanf("%d",obj->a);
int*a
-struct member
a
是一个未初始化的指针,但试图将输入带到它所指向的位置。造成你的错误

scanf("%d", &obj->a);
scanf("%d",obj->a);
现在,您可以为
指向位置获取输入

 obj->a = malloc(sizeof(int)) ;

对于您执行的输入操作类型,结构定义不需要原始指针-

 scanf("%d", &(obj->a) );
请注意两者之间的区别-

struct abc{
    int *a;         // Change this to int a; or make a point to a valid memory location
    char *ch[10];   // Change this to char ch[10]; or initialize it with pointers pointing to a valid memory locations
                    // and then take input on to pointer pointing location.
};
我得到了一个分段错误(核心转储???//这是什么意思

执行内存访问冲突的变量会导致分段错误

scanf("%d", &obj->a);
scanf("%d",obj->a);
int*a
-struct member
a
是一个未初始化的指针,但试图将输入带到它所指向的位置。造成你的错误

scanf("%d", &obj->a);
scanf("%d",obj->a);
现在,您可以为
指向位置获取输入

 obj->a = malloc(sizeof(int)) ;

对于您执行的输入操作类型,结构定义不需要原始指针-

 scanf("%d", &(obj->a) );
请注意两者之间的区别-

struct abc{
    int *a;         // Change this to int a; or make a point to a valid memory location
    char *ch[10];   // Change this to char ch[10]; or initialize it with pointers pointing to a valid memory locations
                    // and then take input on to pointer pointing location.
};

扩展卡尔的答案:
char*ch[10]
创建一个由10个指针组成的数组,指向一个字符。您需要的是一个包含10个字符的数组。

扩展卡尔的答案:
char*ch[10]
创建一个包含10个字符指针的数组。您需要的是一个10个字符的数组。

您的代码调用未定义的行为

你应该有
charch[10]并使用预设宽度的scanf以避免溢出

int a  ;  // Can take input directly to "a"
int *a ;  // First "a" must point to a valid memory location that can hold an int
          // Then, can take input to "a" pointing location
更多:


该结构被定义为有一个指向int的指针,您永远不会初始化它,因此指向随机位置,因此会写入您不拥有的内存位置,因此
UB
。将其切换为局部变量
int a
malloc()
整数。

您的代码调用未定义的行为

你应该有
charch[10]并使用预设宽度的scanf以避免溢出

int a  ;  // Can take input directly to "a"
int *a ;  // First "a" must point to a valid memory location that can hold an int
          // Then, can take input to "a" pointing location
更多:


该结构被定义为有一个指向int的指针,您永远不会初始化它,因此指向随机位置,因此会写入您不拥有的内存位置,因此
UB
。请将其切换为局部变量
inta
malloc()
整数。

请下次格式化代码。我相信
a
字段也可以<在该实例中,code>scanf
将期望地址为整数,并且由于
a
本身是指向整数的指针(地址),因此它可以正常工作。但是,除非你有理由这么做,否则最好只做一个
int
,然后像你提到的那样传递它的地址。@Shynthriir-它肯定不是这样的<代码>a
是一个指针,但它不指向任何东西!好的,对不起,他必须先为它分配内存。我想说的一点是,将(分配的)指针传递给int或将地址传递给int不应该有什么区别<在该实例中,code>scanf
将期望地址为整数,并且由于
a
本身是指向整数的指针(地址),因此它可以正常工作。但是,除非你有理由这么做,否则最好只做一个
int
,然后像你提到的那样传递它的地址。@Shynthriir-它肯定不是这样的<代码>a
是一个指针,但它不指向任何东西!好的,对不起,他必须先为它分配内存。我想说的一点是,将(分配的)指针传递给int或将地址传递给int不应该有什么区别。它不应该是
scanf(“%d”,obj->a)
a
是一个指针,因此它本身包含一个地址。它不应该是
scanf(“%d”,obj->a)
a
是一个指针,因此它本身包含一个地址。