在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C/ 為什么說沒有初始化指針?

為什么說沒有初始化指針?

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

typedef struct _Info1
{
    int value;
    char name[64];
}Info1,*pInfo1;

typedef struct _Info2
{
    int value;
    char *name;
}Info2,*pInfo2;

typedef struct _Info3
{
    int value;
    size_t length;        //通過length來控制name的長度
    char name[1];
}Info3,*pInfo3;

int main()
{
    Info1 *pi1 = (Info1 *)malloc(sizeof(Info1));
    if (pi1 == NULL)
    {
        goto err;
    }
    memset(pi1, 0,sizeof(Info1));
    strcpy_s(pi1->name, 64, "lucy");
    pi1->value = 78;

    Info2 *pi2 = (Info2 *)malloc(sizeof(Info2));
    if (pi2 == NULL)
    {
        goto err;
    }
    memset(pi2, 0, sizeof(Info2));
    size_t len = sizeof("lucy") + 1;
    pi2->value = 78;
    pi2->name = (char *)malloc(len);
    if (pi2->name == NULL)
    {
        goto err;
    }
    memset(pi2->name, 0, len);
    strcpy_s(pi2->name, len, "lucy");

    Info3 *pi3 = (Info3 *)malloc(sizeof(Info3)+strlen("lucy")+1-1);
    if (pi3 == NULL)
    {
        goto err;
    }
    memset(pi3, 0, sizeof(Info3) + strlen("lucy") + 1 - 1);
    pi3->value = 78;
    pi3->length = strlen("lucy") + 1;
    strcpy_s(pi3->name, pi3->length, "lucy");

    printf("1:score:%d ,name:%s\n", pi1->value, pi1->name);
    printf("2:score:%d ,name:%s\n", pi2->value, pi2->name);
    printf("3:score:%d ,name:%s\n", pi3->value, pi3->name);

err:
    if (pi1)
        free(pi1);
    if (pi2)
        free(pi2);
    if (pi2->name)
        free(pi2->name);
    if (pi3)
        free(pi3);

    return 0;
}

錯誤提示說pi2和pi3沒有初始化。
圖片描述

請問是什么原因。

回答
編輯回答
北城荒

可能是編譯器不認goto

2018年1月27日 15:46
編輯回答
夏木

如果pi1分配內(nèi)存失敗pi2, pi3是什么?是已經(jīng)定義了還是沒有?已經(jīng)定義了的話值是多少?沒有定義那你怎么可以動一個未定義變量?

2017年1月28日 11:16