当前位置:  开发笔记 > 编程语言 > 正文

C malloc字符串

如何解决《Cmalloc字符串》经验,为你挑选了2个好方法。

我正在尝试将动态数组实现到我的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';
}

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有