在struct中解除引用指针的错误

时间:2015-08-08 17:30:01

标签: c string pointers struct

我在网站上尝试了所有解决方案,并没有设法解决这个问题 我在标题中有一个声明的结构

struct _fileNew;
typedef struct _fileNew fileNew;

在我的源文件中我定义了fileNew

struct _fileNew
{
     char chars[];
};

现在在我的主要内容我尝试在结构中打印一些东西

fileNew*  blu;
int i;
for ( i = 0; i < 10; i++)
{
    blu->chars[i] = 'b';
}
printf("%s", blu->chars);

我得到了

错误:取消引用指向不完整类型的指针 我运行了一个调试,我看到cahrs正确填充但它不会打印它。在定义fileNew时我在源文件中做错了什么。?

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要为堆中的结构分配一个内存块,并将其地址分配给您的指针 在C中,每个字符串以'\ 0'(字符串终止符)结尾,因此您还需要添加它。

#include <stdio.h>
#include <stdlib.h>
#define MAX_FILE_SIZE 128

struct _fileNew;
typedef struct _fileNew fileNew;

struct _fileNew
{
    char chars[MAX_FILE_SIZE];
};

int main()
{
    fileNew *blu = malloc(sizeof *blu);
    int i;
    for (i = 0; i < 10; i++)
    {
        blu->chars[i] = 'b';
    }
    blu->chars[i] = '\0';
    printf("%s", blu->chars);
    return 0;
}

答案 1 :(得分:-1)

您只有一个实际上没有指向任何东西的指针,需要为char []分配大小。在main中,你需要指定指向声明的结构的指针或使用malloc作为其他答案建议:

static fileNew blu;
fileNew *p_blu = &blu;
...
p_blu->chars[i] = 'b';