如何在结构中保存任意数量字符的数组

Kyu*_*yuu 0 c pointers

理解指针以及如何将它们与函数一起使用时遇到很多麻烦.尝试编写一个函数,它接受任意大小的字符数组并将其保存在struct.This是我尝试但得到seg错误.

#define LENGTH 50

typedef struct{
    char *pass;
    int length;
}pass_t;

void createNewPassword(pass_t *password);

int main(int argc, char *argv[]) {
    pass_t *password=NULL;

    createNewPassword(password);
    printf("%d",password->length);
}


void
createNewPassword(pass_t *password){
    char c;
    int i, n=LENGTH;

    if (!(password->pass=malloc((n+1)*sizeof(char)))) {
        printf("Out of memory, exiting.\n");
        exit(EXIT_FAILURE);
    }

    printf("Enter a new password: ");
    while((c=getchar())!='\n'){
        if (i>=n){
            n *= 2;
            if (!(password->pass=realloc(password->pass, 
            (n+1)*sizeof(char)))) {
                printf("Out of memory, exiting.\n");
                exit(EXIT_FAILURE);
            }
        }
        password->pass[i++]=c;
    }
    password->pass[i+1]='\0';
    password->length=i;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

问题是,在createNewPassword()函数内部,参数password为NULL.您实际上是取消引用NULL指针.它调用未定义的行为.

password在使用之前需要分配内存.

那就是说,你password直接去了createNewPassword().你不能分配内存以password该函数内部并期待反映到main(),由于C采用传址值.如果要从中分配内存,可以从main()自身分配内存,也可以将指针传递给.passwordcreateNewPassword()

再然后,sizeof(char)是保证1C,你不需要添加作为乘数为获取大小.这是多余的.