다차원 배열에 데이터를 쓰려고 시도한 다음 배열을 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);
}
:
나는 다음과 같은 코드를 사용하고
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]:
lines[1]:
대신 경우, 지정된 my_func
의를, 나는 다음과 같은 사용
그러면 모든 것이 작동하고 다음과 같이 표시됩니다.
lines[0] = one two three
lines[1] = my value = 5
lines[0]: one two three
lines[1]: my value = 5
여기 백그라운드에서 무엇이 일어나고 있습니까? my_print
이 내 문자열을 인쇄 할 수 있도록하려면 왜 malloc
을 사용해야합니까?
감사합니다 당신이
2D 배열이 포인터에 대한 포인터로 부패하지 않는다는 사실이 답이었습니다. 감사! – DuneBug