我的代码有问题。实际上,当编译器执行以下行
时scanf_s("%c", macchina[i].marca, 50);
Visual Studio让我犯了这个错误。它给我带来了与函数get_s相同的问题。
我无法理解代码有什么问题。感谢您的支持
这是我的代码
#include <stdio.h>
int main(void) {
struct automobile{
char *marca;
int modello;
int vendute;
};
struct automobile macchina[5];
for (int i = 0; i < 5; i++){
printf("Inserisci marca: ");
scanf_s("%c", macchina[i].marca, 50);
}
}
答案 0 :(得分:1)
您遇到的问题是,您没有为macchina[i].marca
分配内存。
作为一个单元化指针,目前它指向一些随机存储器位置,可能无法从您的应用程序访问。因此,该位置几乎无效。
访问无效内存会调用undefined behavior。
要解决:要么
将marca
定义为数组,例如char marca[50];
或类似
在使用之前使用malloc()
或系列分配动态内存。
也就是说,您应该将格式说明符更改为%s
以扫描字符串。如果没有宽度说明符,%c
只需要一个char
。
答案 1 :(得分:0)
macchina[i].marca
是一个单位指针。如果不分配内存,就无法读入它。
由于您想要将50
个字符读入其中,您可能需要使用%s
(C字符串)并将结构的定义更改为:
struct automobile{
char marca[50];
int modello;
int vendute;
};
并将scan_f()
称为:
scanf_s("%s", macchina[i].marca, sizeof(macchina[i].marca) );
如果您希望大小是动态的,则需要使用malloc()
。
答案 2 :(得分:0)
macchina[i].marca
是未初始化的char
指针。您需要分配内存以指向它,或者您可以使用数组。
E.g。要使用一个能够容纳50个字符的数组,请将代码更改为:
#include <stdio.h>
int main(void) {
struct automobile{
char marca[51]; // 50 chars + '\0' terminator
int modello;
int vendute;
};
struct automobile macchina[5];
for (int i = 0; i < 5; i++){
printf("Inserisci marca: ");
scanf_s("%s", macchina[i].marca, 50); // %c is only for reading single char values, use %s for strings.
}
}