为char数组

时间:2016-07-26 08:06:58

标签: c arrays pointers

我对今晚遇到的错误感到很困惑。为数组中的元素赋值时,另一个元素会发生变化,我无法弄清楚发生了什么。而且我不知道我是否正确使用了sizeof()。但是,在添加强化输出语句后,它们似乎工作正常。问题似乎在第11行,但我不知道如何解决它。这是我的代码。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void addstr(char ***arr, const char *str, int *size){
  char *my_str=(char *)calloc(strlen(str)+1,sizeof(char));
  strcpy(my_str,str);
  char **new_arr=realloc(*arr,sizeof(*arr)+sizeof(char*));
  /*for (int i=0;i<*size;i++)
    printf("%s\n",new_arr[i]);*/
  new_arr[*size]=my_str;
  /*for (int i=0;i<*size;i++)
    printf("%s\n",new_arr[i]);*/
  *arr=new_arr;
  *size=*size+1;
}

int main(){
  char **mystery=0;
  int size=0;
  const char *ptr1="test1";
  const char *ptr2="test2";
  const char *ptr3="test3";
  const char *ptr4="test4";
  const char *ptr5="test5";
  const char *ptr6="test6";
  addstr(&mystery,ptr1,&size);
  addstr(&mystery,ptr2,&size);
  addstr(&mystery,ptr3,&size);
  addstr(&mystery,ptr4,&size);
  addstr(&mystery,ptr5,&size);
  addstr(&mystery,ptr6,&size);
  int i;
  printf("\nresult:\n\nsize: %d\n",size);
  for (i=0;i<size;i++)
    printf("%s\n",mystery[i]);
}

输出

result:

size: 6
test1

test3
test4
test5
test6

test2不知何故发生了变化。这让我很生气,因为我还是c的新手并且不知道到底出了什么问题。有人可以帮忙吗?

0 个答案:

没有答案