#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char* a;
scanf("%s",a);
printf("%s", a);
free(a);
return 0;
}
我的问题是没有静态声明的动态分配。
我只想在输入语句中进行动态赋值。内部代码或不通过静态声明。。。然而,使用上面的输入这个代码,动态分配是不可能的。还有别的办法吗?通过不接触内部代码或进行静态声明。
您可以使用<stdlib.h>
中的realloc
来实现它。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
fputs("Input: ", stdout);
char *str = malloc(1);
int c, i;
for (i = 0; (c = fgetc(stdin)) != 'n' && c != EOF; ++i) {
str[i] = c;
str = realloc(str, i + 2);
}
str[i] = ' ';
printf("Output: %sn", str);
free(str);
return EXIT_SUCCESS;
}
但我不建议你这样做,因为根据实施情况,这可能会很昂贵。相反,我只会创建一个固定大小的字符串,以防止缓冲区溢出。
char str[20];
scanf("%19s", str);
或使用fgets
:
char str[20];
fgets(str, 20, stdin);