Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C malloc字符串_C_Arrays_Pointers_Malloc_Dynamic Arrays - Fatal编程技术网

C 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)

我试图在我的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<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;i
malloc()
不会在分配的内存中“放入”垃圾,它只是不会将其初始化为任何内容,因此您会得到任何“垃圾”。您可以使用
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';
}