我正在尝试将动态数组实现到我的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)+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初始化数组
运行推送功能后
1> DBug..:
malloc()
不会在分配的内存中"放置"垃圾,它只是不会将其初始化为任何东西,所以你得到任何"垃圾".您可以使用其中一个memset()
清除内存,只使用calloc()
它,这样做.
不,这不是内存复制,而是指针赋值.如果您希望malloced内存表示C字符串,请将第一个元素设置为0,`a-> array [0] ='\ 0';`
2> chux - Reins..:不清楚OP如何确定"它插入垃圾数据".由于``malloc()`没有初始化分配数据的内容,因此可以根据需要设置保险数据.
将字段
array
视为字符串是一个问题,因为array
非空字符终止.改变循环以
<=
推动'\0'
.for (i=0;i<=strlen(exp);i++){ pushArray(&a,exp[i]); }或者在每次推送时附加空字符.注意:很少需要
* sizeof(char)
和转换返回值*alloc()
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'; }