scanf 后的动态内存分配
Dynamic memory allocation after scanf
是否可以在不首先将其声明为数组的情况下在使用 scanf 读取的字符串中进行动态内存分配?
无法为 string
在 使用 scanf
读取后动态分配内存,因为 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
。
注意 :你应该小心你提供的输入,因为你可能会导致 buffer-overflow 如果你给一个大于分配的 space.
的字符串
从你的问题来看,你似乎想在 扫描到 之后为字符串分配内存。不幸的是你不能这样做,因为 scanf
函数需要内存地址来放置它扫描的数据。你能做的最好的是:
char *someInput = malloc(sizeof(char) * 80);
scanf("%s", someInput);
编辑:请注意 80 是任意数量,这表示我们为字符串分配的字符数 - 选择 80 是因为它是命令提示符中一行的通常长度。
是否可以在不首先将其声明为数组的情况下在使用 scanf 读取的字符串中进行动态内存分配?
无法为 string
在 使用 scanf
读取后动态分配内存,因为 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
。
注意 :你应该小心你提供的输入,因为你可能会导致 buffer-overflow 如果你给一个大于分配的 space.
的字符串从你的问题来看,你似乎想在 扫描到 之后为字符串分配内存。不幸的是你不能这样做,因为 scanf
函数需要内存地址来放置它扫描的数据。你能做的最好的是:
char *someInput = malloc(sizeof(char) * 80);
scanf("%s", someInput);
编辑:请注意 80 是任意数量,这表示我们为字符串分配的字符数 - 选择 80 是因为它是命令提示符中一行的通常长度。