c - 如何使用指针将值输入到结构中?

标签 c pointers structure function-pointers

我正在编写的这个程序有一个小问题,我试图使用指针将数据输入到结构中,但编译器只是给我一个错误,指出:“取消引用指向不完整类型的指针”

程序的功能很简单: 使用函数将数据输入到使用指针的结构中的程序

代码如下: main 函数只是调用输入函数并将结构体指针作为参数传递

void input(struct test *ptr)
{
printf("Enter: \n");
fflush(stdin);
scanf("%s",&ptr->entry);

}

void print(struct test *ptr)
{

}

int main()
{
    int counter;
    struct test
    {
        char entry[20];

    }p[4];
    struct test *ptr=p;
    ptr=&p;

    for(counter=0;counter<=4;counter++)
        {
            input(ptr);
            ptr++;
        }
    return 1;
}

打印功能仍然为空。

最佳答案

第一个问题是 struct test 仅在“main”函数中定义,并且无法被 inputprint 访问。在所有函数之外定义它。

然后你想扫描一个字符串,而不是一个字符,所以你需要"%s"。实际上是“%19s”,所以如果输入太长,您不会离开条目数组的末尾(向@BLUEPIXY致敬)

并且 ptr->entry 是要放置字符串的地址,因此不需要 &ptr->entry 而是 ptr->条目

您在 main 中分配给 ptr 两次。第二个是错误的(同样,p是结构数组的地址,所以你在初始化时它是正确的。&p的赋值是错误的。

最后,您的 for 循环执行 5 次 (0,1,2,3,4),最后一次迭代访问 4 元素 p 数组末尾的一个

总而言之:

#include <stdio.h>

struct test
{
    char entry[20];
};

void input(struct test *ptr)
{
    printf("Enter: \n");
    fflush(stdin);
    scanf("%19s", ptr->entry);
}

void print(struct test *ptr)
{

}

int main()
{
    int counter;
    struct test p[4];
    struct test *ptr=p;

    for(counter=0;counter<4;counter++)
    {
        input(ptr);
        ptr++;
    }
    return 1;
}

关于c - 如何使用指针将值输入到结构中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26955414/

相关文章:

c++ - 将变量 N​​AME 传递给函数

c++ - 为什么我们可以将取消引用的指针递增到 C++ 中的常量数据?

c++ - Turbo C++ 中的日期结构

我可以将结构指针转换为指向 C1x 中的初始匿名成员吗?这甚至是正确的问题吗?

c - Valgrind:不是堆叠的、malloc 的或(最近)free 的

c - 如何处理类型在运行时确定的数组的声明和分配?

c - 如果定义在使用后出现,为什么 XC16 编译器会删除内联函数?

c - 创建隧道时需要 "maxfd"做什么?

c - 为什么我可以 strupr 工作,但 strcpy 却不能

c# - 在构建时将 C++ 结构转换为 C# 结构