C 字符的动态分配数组
我的目标是返回所需的句子大小。 i、 e输入大小=9,完整句子=“堆栈溢出”, 将返回“stack ov”(0/)这是到目前为止我得到的结果C 字符的动态分配数组,c,dynamic-allocation,calloc,C,Dynamic Allocation,Calloc,我的目标是返回所需的句子大小。 i、 e输入大小=9,完整句子=“堆栈溢出”, 将返回“stack ov”(0/)这是到目前为止我得到的结果 #include <stdio.h> #include <stdlib.h> int main(void) { int size; char* A; printf("insert size you desired +1 :\n"); scanf ( "%d%*c", &size);
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int size;
char* A;
printf("insert size you desired +1 :\n");
scanf ( "%d%*c", &size);
A = calloc(size,sizeof(char));
printf("insert full size sentence :\n");
fgets ( A, size, stdin);
printf("desired size sentence : %s\n",A);
return 0;
}
#包括
#包括
内部主(空)
{
整数大小;
char*A;
printf(“插入所需大小+1:\n”);
scanf(“%d%*c”、&size);
A=calloc(大小,大小(字符));
printf(“插入全尺寸句子:\n”);
fgets(A、尺寸、标准尺寸);
printf(“所需大小的句子:%s\n”,A);
返回0;
}
已解决的在分配给请求大小的缩减缓冲区中存储完整句子将溢出。要读取完整行,请使用
fgets()
而不是scan()
在“字符串”中填充。请注意,fgets()
也会读取最后一行字符。如果(fgets(A,size,stdin)!=0){printf(…);printf(…);},则可能需要。使用%s
和scanf()
而不指定多少字节是可以的,这等于自杀;如果用户说9
,然后键入Heap Over Flow代码>然后15个字符加上null将存储在分配的9个字节中-这不是幸福的秘诀。遗憾的是,您无法动态地告诉scanf()
字符串有多大;您必须使用正确的大小信息格式化字符串并使用它。但是它太容易破坏你的程序。fgets()
代码有一些小问题,但它是“安全的”。不要使用gets()
它很容易出错,也不再是C的一部分。的可能重复