C malloc字符串
我试图在我的C堆栈中实现一个动态数组,但是我有点困惑char malloc是如何工作的,以至于它在创建垃圾数据时就插入垃圾数据 下面是用于初始化数组和推入元素的代码C malloc字符串,c,arrays,pointers,malloc,dynamic-arrays,C,Arrays,Pointers,Malloc,Dynamic Arrays,我试图在我的C堆栈中实现一个动态数组,但是我有点困惑char malloc是如何工作的,以至于它在创建垃圾数据时就插入垃圾数据 下面是用于初始化数组和推入元素的代码 typedef struct { char *array; int used; int size; } Array; void initArray(Array *a, int initialSize) { a->array = (char *)malloc(initialSize * sizeof(char)
typedef struct {
char *array;
int used;
int size;
} Array;
void initArray(Array *a, int initialSize) {
a->array = (char *)malloc(initialSize * sizeof(char)+1);
a->used = 0;
a->size = initialSize;
}
void pushArray(Array *a, int element) {
if (a->used == a->size) {
a->size +=1;
a->array = (char *)realloc(a->array, a->size * sizeof(char));
}
a->array[a->used++] = element;
}
这里是我初始化元素并将其推入数组的主要代码段
int main()
{
Array a;
int i=0;
initArray(&a,0);
char choice='a';
char exp[100]="";
printf("Please enter an expression\n");
scanf("%s",exp);
for (i=0;i<strlen(exp);i++){
pushArray(&a,exp[i]);
}
intmain()
{
阵列a;
int i=0;
initArray(&a,0);
char choice='a';
char exp[100]=“”;
printf(“请输入表达式”\n);
扫描频率(“%s”,exp);
对于(i=0;imalloc()
不会在分配的内存中“放入”垃圾,它只是不会将其初始化为任何内容,因此您会得到任何“垃圾”。您可以使用memset()
清除内存,也可以使用calloc()
,这样做。malloc()
不会“放入”在分配的内存中,垃圾不会初始化为任何内容,因此您会得到任何“垃圾”。您可以使用memset()
清除内存,也可以使用calloc()
,它就是这样做的。不清楚OP如何确定“它插入垃圾数据”。因为``malloc()`不初始化分配数据的内容,确保根据需要设置数据
将字段array
视为字符串是一个问题,因为array
不是以空字符结尾的
将循环更改为不清楚OP是如何确定“它插入垃圾数据”的。由于“`malloc()`未初始化所分配数据的内容,因此请确保根据需要设置数据
将字段array
视为字符串是一个问题,因为array
不是以空字符结尾的
将loop更改为Malloc只会给您一个指向内存中某个位置的指针,它的内容将是上次某个进程使用它时剩下的内容。如果您需要初始化分配内存的内容,您应该使用calloc而不是Malloc。Malloc只会给您一个指向内存中某个位置的指针,并且s的内容将是上次某个进程使用它时剩下的内容。如果需要初始化分配内存的内容,则应使用calloc而不是malloc。是否有方法覆盖这些内容,如->array=“”不,这不是内存复制,而是指针分配。如果希望malloced内存表示C字符串,请将第一个元素设置为0,a->array[0]='\0';
是否有方法覆盖内容,如a->array=“”不,这不是内存复制,而是指针分配。如果希望malloced内存表示C字符串,请将第一个元素设置为0,a->array[0]='\0';
for (i=0;i<=strlen(exp);i++){
pushArray(&a,exp[i]);
}
void initArray(Array *a, int initialSize) {
a->array = malloc(initialSize + 1);
a->used = 0;
a->size = initialSize;
a->array[0] = '\0';
}
void pushArray(Array *a, int element) {
if (a->used == a->size) {
a->size +=1;
a->array = realloc(a->array, a->size + 1);
}
a->array[a->used++] = element;
a->array[a->used] = '\0';
}