我对今晚遇到的错误感到很困惑。为数组中的元素赋值时,另一个元素会发生变化,我无法弄清楚发生了什么。而且我不知道我是否正确使用了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
的新手并且不知道到底出了什么问题。有人可以帮忙吗?