分配内存后出现问题

时间:2014-01-02 07:29:38

标签: c

使用malloc后,name会被打印,但在分配内存并输入string之后,puts根本不打印字符串,printf也不打印1}} ...这是为什么?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
    char *name;
    int size;
    printf("enter the size if name below\n");
    scanf("%d", &size);
    name  =(char*) malloc(size * sizeof(char));//since my compiler returns pointr of type    void, you have specify whether (int*) or (char*)
    if (name== NULL)
    printf("memory allocation failed,,,\n");
    printf("%s\n",name);
    printf("enter name below\n");
    scanf("%s", name);
    printf("name is\n%s", name);
    name = (char*)realloc(name, 100*sizeof(char));
    if (name == NULL)
    printf("failed\n");
    gets(name);
    getchar();
    puts(name);
    free(name);
    return 0;
}

3 个答案:

答案 0 :(得分:0)

首先,malloc/realloc执行返回void,它们返回void*,它完全能够隐式转换为任何其他指针类型。在C中明确地这样做是个坏主意,因为它可以隐藏某些微妙的错误。

此外,sizeof(char) 总是一,您不需要乘以它。

第三,使用gets是一个非常糟糕的主意,因为没有办法防止缓冲区溢出。有much better ways来做用户输入。

至于具体问题,我怀疑它最有可能仍然在getchargets将从用户获得一行(包括换行符),但除非您输入另一个字符(如果它使用基于行的I / O,可能是一个完整的行),它似乎会挂起。输入名称后,只需再次按 ENTER 即可查看。

答案 1 :(得分:0)

fgets()的地方尝试scanf()gets()。它会有用

答案 2 :(得分:0)

您发布的程序会导致undefined behavior。这是因为

printf("%s\n",name);

变量name中没有任何内容,您尝试在已分配的内存中打印该值。首先,您需要在打印之前为name分配一些值。