Я пытаюсь записать данные в многомерный массив, а затем передать массив как const char**
другой функции.Когда я печатаю char*
локально в функции, в которой он объявлен, все работает как положено.Но когда я пытаюсь напечатать массив char*
в другой функции, все они являются пустыми строками.
Я использую следующий код:
void my_print (const char** lines, unsigned int num)
{
int i = 0;
for (i = 0; i < num; i++) {
fprintf(stderr, "lines[%d]: %s", i, lines[i]);
}
}
void my_func ()
{
char cfg[2][200];
unsigned int value = 5;
snprintf(cfg[0], 200, "one two three\n");
snprintf(cfg[1], 200, "my value = %u\n", value);
fprintf(stderr, "lines[0] = %slines[1] = %s\n", cfg[0], cfg[1]);
my_print((const char**) cfg, 2);
}
Это приводит к следующему выводу:
lines[0] = one two three
lines[1] = my value = 5
lines[0]:
lines[1]:
Если вместо данного my_func
я используюследующее:
void my_func ()
{
char* cfg[2];
unsigned int value = 5;
cfg[0] = malloc(200);
cfg[1] = malloc(200);
snprintf(cfg[0], 200, "one two three\n");
snprintf(cfg[1], 200, "my value = %u\n", value);
fprintf(stderr, "lines[0] = %slines[1] = %s\n", cfg[0], cfg[1]);
my_print((const char**) cfg, 2);
}
Тогда все работает, и я получаю:
lines[0] = one two three
lines[1] = my value = 5
lines[0]: one two three
lines[1]: my value = 5
Итак, что здесь происходит в фоновом режиме?Почему мне нужно использовать malloc
, чтобы my_print
мог печатать мои строки?
Спасибо