我有一个以字符串数组为参数的函数,如下所示:
void print_string_array(int *dims, const char **str) {
for (int i=0; i<dims[0]; i++) {
printf("STRING %d: %s\n", i, str[i]);
}
}
我想知道为什么使用它(显示没有free
个呼叫):
int main() {
char *test_str_1[3];
for (int i=0; i<3; i++) {
test_str_1[i] = malloc(sizeof(char *) * 4096);
test_str_1[i][0] = '\0';
}
strncat(test_str_1[0], "This is first line", 4095);
strncat(test_str_1[1], "This is second line", 4095);
strncat(test_str_1[2], "This is third line", 4095);
int dims[1] = {3};
print_string_array(dims, (const char **) test_str_1);
return 0;
}
工作正常,但以下segfaults在print_string_array
中的printf
行:
int main () {
char test_str_1[3][4096];
for (int i=0; i<3; i++) {
test_str_1[i][0] = '\0';
}
strncat(test_str_1[0], "This is first line", 4095);
strncat(test_str_1[1], "This is second line", 4095);
strncat(test_str_1[2], "This is third line", 4095);
int dims[1] = {3};
print_string_array(dims, (const char **) test_str_1);
return 0;
}
我原以为这两者是对等的,但显然事实并非如此……
非常感谢你的帮助!