如何在结构字段中添加值(字符串)?
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
这里是为了忽略换行符,这样就不会妨碍进一步阅读。
我在结构字段中输入值(字符串)时遇到问题。有人可以告诉我它应该如何正确显示吗?我想从控制台的 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
这里是为了忽略换行符,这样就不会妨碍进一步阅读。