在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中为结构中的单个字符分配内存[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在c中为指向char的指针数组分配内存

我应该如何释放类型映射中为 argout 结构数组分配的内存?

用于在C中为二叉搜索树分配内存的分段错误

关于结构中变量的内存分配的问题(在 C 中)[重复]

在 C# 中为富文本框分配内存

malloc分配内存的结构