如何使用允许我访问结构字段的结构来测试 - > C运算符?

new*_*bie 1 c pointers dereference

我正在尝试测试->运算符,但我似乎无法做到这一点,因为当我执行以下程序并使用流提供输入时,程序停止工作.

注1:我在编译之前收到警告,它说:

格式'%s'需要'char*'类型的参数,但参数2的类型为'int'[-Wformat =]

注2:如果我省略该行printf("%s\n", *(&home1)->name ),它就可以正常工作,并实际打印我写的任何内容.

#include <stdio.h>
#include <string.h>

typedef struct home_type {
    char name[30] ;
}home;

int main (void) {
    home home1 ;
    char name[30] ;
    scanf ("%[^\n]%*c", name);
    strcpy( home1.name, name) ;
    printf("%s\n", home1.name ) ;
    printf("%s\n", *(&home1)->name ) ;
    return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*ala 5

删除*,它的工作原理.代码*(&home1)->name类似于*(home1.name)代替例如通过指针的第一个字符的,它通过所述第一值charname; 由于默认参数促销,该值被转换为int.

从而:

printf("%s\n", (&home1)->name );
Run Code Online (Sandbox Code Playgroud)

应该管用; 但是你不需要->这里; ->现在只是更方便地使用指针结构的快捷方式; 即(*ptr).name变得更加美味ptr->name; 因为home它已经是一个struct而不仅仅是指向struct的指针,你应该使用它..