是否可以在使用scanf读取的字符串中进行动态内存分配,而无需首先将其声明为数组?
在使用scanf
读取string
之后,不可能为其动态分配内存,因为scanf
需要一个指针。这意味着您必须首先分配内存,以便将其作为参数提供给scanf
。
你可以像下面的例子一样这样做:
char *str;
str = malloc(X*sizeof(char)); //where x is the number of characters you want to allocate
if (str != NULL)
int result = scanf("%s", str);
换句话说,将分配的指针传递给scanf
。
注意:您应该小心输入,因为如果您输入的字符串大于分配的空间,可能会导致缓冲区溢出。
根据您的问题,您似乎想在扫描字符串后为其分配内存。不幸的是,您无法做到这一点,因为scanf
函数需要内存地址来放入它扫描的数据。您能做的最好的事情是:
char *someInput = malloc(sizeof(char) * 80);
scanf("%s", someInput);
编辑:请注意,80是一个任意的数量,这表示我们为字符串分配了多少个字符来保存-80是在命令提示符中选择的,因为它是一行的通常长度。