在C中为结构中的单个字符分配内存[重复]
Posted
技术标签:
【中文标题】在C中为结构中的单个字符分配内存[重复]【英文标题】:Allocating Memory for a single character within a struct in C [duplicate] 【发布时间】:2021-07-06 18:25:38 【问题描述】:在下面的代码中,我试图创建一个包含 2 个结构的结构指针数组。我认为我的问题与角色的内存分配有关。代码本身是不言自明的,但在扫描第二个 char 变量时我似乎无法解决问题。
#include <stdlib.h>
#include <string.h>
typedef struct Structure
char character ;
char* string ;
int integer ;
float floatingPoint ;
Structure ;
void *insertData(struct Structure *x)
int i ;
for (i = 0 ; i < 2 ; i++)
printf("Enter a character: ") ;
scanf("%c", &x[i].character) ;
printf("Enter an integer: ") ;
scanf("%d", &x[i].integer) ;
printf("Enter a string: ") ;
scanf("%s", x[i].string) ;
printf("Enter a floating point: ") ;
scanf("%f", &x[i].floatingPoint) ;
void printData(struct Structure *x)
int i ;
for (i = 0 ; i < 2 ; i++)
printf("\n\n\t Pointer: \n") ;
printf("Character: %c\n", x[i].character) ;
printf("Integer: %d\n", x[i].integer) ;
printf("String: %s\n", x[i].string) ;
printf("Floating Point: %f\n", x[i].floatingPoint) ;
int main()
int i ;
struct Structure* pointers = (struct Structure*) malloc(2 * sizeof(struct Structure)) ;
for (i = 0 ; i < 2 ; i++)
//allocating mem for string
pointers[i].string = malloc(sizeof(char)) ;
insertData(pointers) ;
printData(pointers) ;
return 0;
输出:
Enter a character: A
Enter an integer: 69
Enter a string: Sheeesh
Enter a floating point: 6.9
Enter a character: Enter an integer: 111
Enter a string: string
Enter a floating point: 1.1
Character: A
Integer: 69
String: Sheeesh
Floating Point: 6.900000
Character:
Integer: 111
String: string
Floating Point: 1.10000
【问题讨论】:
你有什么问题?顺便提一句。你用typedef struct Structure
,所以不用一直写struct Structure
,用Structure
就行了。
输出看起来不错,但你为什么要尝试将“Sheeesh”存储在一个仅能容纳一个字符(实际上应该是 \0)的字符串中?
我认为问题是 scanf 不允许您输入第二个字符。这可能是:***.com/questions/13372923/…
感谢大家的帮助!我删除了结构结构(它可以工作但毫无意义),并通过将“%c”更改为“%c”来修复它!我以为是内存问题,但似乎不是。
【参考方案1】:
您只为字符串分配一个字节 (AKA sizeof (char)
)。这还不够。
【讨论】:
以上是关于在C中为结构中的单个字符分配内存[重复]的主要内容,如果未能解决你的问题,请参考以下文章