如果我运行此代码向我显示“分段错误”,但如果在“创建”功能的“for”中我设置了条款i< 1(即一个循环),程序正在运行,为什么?
void create(char ***a,int *length){
int i=0;
*length = 0;
for(i=0;i<4;i++){
++(*length);
(*a)=realloc(*a,(*length)*sizeof(char *));
*(a[i])="Hello\0";
}
}
int main(int argc, char *argv[]) {
int i;
char **a = NULL;
int *l = malloc(sizeof(int));
create(&a,l);
for (i=0; i<(*l); i++) {
printf("%s",a[i]);
}
printf("\n");
return EXIT_SUCCESS;
}
我想要的是,最后,该节目向我展示了4次“你好”
答案 0 :(得分:4)
此
*(a[i]) = ...
应该是
(*a)[i] = ...
像"Hello"
已经隐式的“字符串”字面值会添加终止'\0'
字符。因此,无需在此处明确指定 :"Hello\0"
。