使用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;
}
答案 0 :(得分:0)
首先,malloc/realloc
执行不返回void
,它们返回void*
,它完全能够隐式转换为任何其他指针类型。在C中明确地这样做是个坏主意,因为它可以隐藏某些微妙的错误。
此外,sizeof(char)
总是一,您不需要乘以它。
第三,使用gets
是一个非常糟糕的主意,因为没有办法防止缓冲区溢出。有much better ways来做用户输入。
至于具体问题,我怀疑它最有可能仍然在getchar
。 gets
将从用户获得一行(包括换行符),但除非您输入另一个字符(如果它使用基于行的I / O,可能是一个完整的行),它似乎会挂起。输入名称后,只需再次按 ENTER 即可查看。
答案 1 :(得分:0)
在fgets()
的地方尝试scanf()
或gets()
。它会有用
答案 2 :(得分:0)
您发布的程序会导致undefined behavior
。这是因为
printf("%s\n",name);
变量name
中没有任何内容,您尝试在已分配的内存中打印该值。首先,您需要在打印之前为name
分配一些值。