Bri*_*ace 1 c arrays malloc pointers 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)+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;
}
Run Code Online (Sandbox Code Playgroud)
这是我初始化并将元素推入数组的主要代码段
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]);
}
Run Code Online (Sandbox Code Playgroud)
malloc()不会在分配的内存中"放置"垃圾,它只是不会将其初始化为任何东西,所以你得到任何"垃圾".您可以使用其中一个memset()清除内存,只使用calloc()它,这样做.
不清楚OP如何确定"它插入垃圾数据".由于``malloc()`没有初始化分配数据的内容,因此可以根据需要设置保险数据.
将字段array视为字符串是一个问题,因为array非空字符终止.
改变循环以<=推动'\0'.
for (i=0;i<=strlen(exp);i++){
pushArray(&a,exp[i]);
}
Run Code Online (Sandbox Code Playgroud)
或者在每次推送时附加空字符.注意:很少需要* 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';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |