回 帖 发 新 帖 刷新版面

主题:请教一个关于c语言动态内存分配函数的问题

我想利用动态内存分配函数的方式输入五个单词,再显示出五个单词,但是总是不行,请教一下各位高手程序哪里有问题吗?  一下是代码,环境是vs2010.
#include <stdio.h>
#include <stdlib.h>


void main()
{
    char *p1;
    int i;
    void *p2;
    
    p2=malloc(5*sizeof(char));
    
    for(i=0;i<5;i++)
    {
        p1=(char *)p2;
        
        printf("please input the %dth word\n",i+1);
        scanf("%s",p1+i);
        
    }
    
  
    for (i=0;i<5;i++)
    {
        printf("%s ",p1[i]);
    }
    free(p2);
    system("pause");
}

回复列表 (共2个回复)

沙发

p2=malloc(5*sizeof(char));
只分配了5个char大小的内存空间,不太够。
楼主可以想想静态分配内存应该怎么写,然后再看动态分配的应该怎么写。

静态分配:
#define WORD_LENGTH_MAX 20
char words[5][WORD_LENGTH_MAX];
for (i = 0; i < 5; ++i)
{
  scanf("%s", words[i]);
}

动态分配:
#define WORD_LENGTH_MAX 20
char* words[5];
for (i = 0; i < 5; ++i)
{
  words[i] = malloc(WORD_LENGTH_MAX);
  scanf("%s", words[i]);
}

// 动态分配的内存,用完之后要记得释放
for (i = 0; i < 5; ++i)
{
  free(words[i]);
  words[i] = NULL;
}

板凳


非常感谢,明白了,也学习了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册