动态分配字符串以包含C中的用户输入


#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);

最新更新