如何在结构字段中添加值(字符串)?

How can I add a value (string) in the structure field?

我在结构字段中输入值(字符串)时遇到问题。有人可以告诉我它应该如何正确显示吗?我想从控制台的 window 添加一个字符串 (surname/nazwisko) 到 student1.nazwisko 但我不知道它应该是什么样子。这个跟动态内存分配有关

Code image

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

struct dane {
    char* imie;
    char nazwisko[30];
    int nr_albumu;
};
struct node {
    struct node* next;
    struct node* prev;
    char nazwa[50];
};

int main(int argc, char* argv[])
{
    struct dane student1, student2, student3;
    student1.imie = "Arek";
    student1.nr_albumu = 374829;
    printf("Podaj nazwisko\n");
    //*(student1.nazwisko) = (struct dane*)malloc(20 * sizeof(*student1.nazwisko));
    
    //scanf_s("%s", student1.nazwisko);
    

    printf("Dane studenta 1: %s\t%s\t%d\n", student1.imie, student1.nazwisko, student1.nr_albumu);

    return 0;
}

成员nazwisko是结构中静态分配的数组

要通过 scanf() 读取字符串,您应该指定要读取的最大字符数(最多)缓冲区大小减一(这个“减一”用于终止 null-字符)并使用 return 值检查读取是否成功。

有了这几点,就会变成这样,例如:

if (scanf("%29s", student1.nazwisko) != 1) {
    fputs("failed to read student1.nazwisko\n", stderr);
    return 1;
}

请注意,%s 格式说明符会读取字符串,直到遇到空白字符。如果你想读一行(直到换行符),你应该使用 "%29[^\n]%*c" 而不是 "%29s"%29[^\n] 表示“最多读取 29 个字符,直到遇到换行符”,%*c 表示“读取一个字符并忽略它”。 %*c这里是为了忽略换行符,这样就不会妨碍进一步阅读。