因此,在编码时将我所学到的所有知识整合到一个随机项目中对我有什么帮助。为了更好地帮助我和理解编码时。我前一段时间了解了getenv并正在对其进行测试。一切正常,直到我重新开始学习c并再次打开该项目为止。

#include <stdio.h>
#include <strings.h>
#include <windows.h>
#include <stdlib.h>

struct envvariabl3s
{
    char *userprofile;
    char *systemroot;

};

void loginscreen(void)
{
    int testbit = 4000000000;
    struct envvariabl3s *envariable;
    char *memtes;
    printf("\nWelcome to the login screen...\n");
    memtes = malloc(20 * sizeof(char));
    if(memtes == 0)
    {
        printf("Error: Not enough memory!");
    }
    strcpy(memtes, "Herp De Derp");

    printf("\nDynamically allocated memory is %s", memtes);
    free(memtes);

    envariable->userprofile = getenv("USERPROFILE"); //SEGFAULT HERE
    envariable->systemroot = getenv("SystemRoot");

    printf("\nUserProfile is: %s", envariable->userprofile);
    printf("\nSystem Root is: %s", envariable->systemroot);
    printf("%d", sizeof(testbit));
}

最佳答案

Envvariable是指向结构的指针,但是您从未创建过要指向它的结构。它只是指向随机内存,而将其分配给不存在的结构会导致崩溃。您需要一个实际的结构(可能使用malloc()分配)来指向指针。

10-06 02:49