2015-04-23 3 views
-1

Я пытаюсь преобразовать 2d массива в двойной указатель, я нашел решение на StackOverflow, но он не работает, если я делаю оттиск это просто тарабарщину ...преобразования из 2d массива двойного указателя

Я должен сделать это, потому что функция, которую я вызываю впоследствии, нуждается в const char **, и я не могу ее изменить.

void test(const char** sl, int n) { 

    char s[n][20], t[20]; 
    int i, j, a; 

    for(i = 0; i < n; ++i) { 
     strcpy(s[i], sl[i]); 
    } 


    for (i = 1; i < n; i++) { 
     for (j = 1; j < n; j++) { 
     if (strverscmp(s[j - 1], s[j]) > 0) { 
      strcpy(t, s[j - 1]); 
      strcpy(s[j - 1], s[j]); 
      strcpy(s[j], t); 
     } 
     } 
    } 

    char *solutionPtrs[n]; 
    for (a = 1; a < n; a++) 
      solutionPtrs[n] = s[n]; 

    char **ptr = solutionPtrs; 


    printf("\nStrings in order are : "); 
    for (i = 0; i < n; i++) 
     printf("\n%s", ptr[i]); <-- just not what it should be. 

} 

Может кто-нибудь сказать мне, почему он не работает?

ответ

1

Я думаю, что это ошибка здесь:

for (a = 1; a < n; a++) 
     solutionPtrs[n] = s[n]; 

вы имели в виду:

for (a = 0; a < n; a++) 
     solutionPtrs[a] = s[a]; 
Смежные вопросы