2010-08-24 3 views

ответ

3

Вы можете сделать следующее. Проверка ошибок опущена для краткости

char** ReturnStringArray() { 
    char** pArray = (char**)malloc(sizeof(char*)*SIZE); 
    int i = 0; 
    for (i = 0; i < SIZE; i++) { 
    pArray[i] = strdup("a string"); 
    } 
    return pArray; 
} 

Обратите внимание, что вам необходимо будет соответственно освободить возвращенную память.

Кроме того, в вашем вызове printf вы, скорее всего, захотите включить в строку строку \n, чтобы обеспечить сброс буфера. В противном случае строки будут попадать в очередь и не будут немедленно распечатаны на консоли.

char** str = ReturnStringArray(); 
for(i=0 ; i<SIZE ; i++) 
{ 
    printf("%s\n", str[i]); 
} 
+0

@JMSA добавлен некоторый код печати. – JaredPar

+0

Вы не смогли исправить ошибку кода, поэтому мой -1 .... посмотрите на строку char str ** = .....: P – t0mm13b

+0

@ tommieb75 исправлено – JaredPar

2

ли это так

#include<stdio.h> 

#define SIZE 10 

char ** ReturnStringArray() 
{ 
    //How to do this? 
    char **strList = (char **)malloc(sizeof(char*) * SIZE); 
    int i = 0; 
    if (strList != NULL){ 
     for (i = 0; i < SIZE; i++){ 
      strList[i] = (char *)malloc(SIZE * sizeof(char) + 1); 
      if (strList[i] != NULL){ 
       sprintf(strList[i], "Foo%d", i); 
      } 
     } 
    } 
    return strList; 
} 

main() 
{ 
    int i=0; 

    //How to do here??? 

    char **str = ReturnStringArray(); 

    for(i=0 ; i<SIZE ; i++) 
    { 
     printf("%s", str[i]); 
    } 
} 
  • Задача 1: Ваша двойная декларация указатель неверен
  • Проблема 2: Вы должны знать размер строки для каждого указателя в двойной -поинтер ..
  • Задача 3: на вас лежит освобождение памяти, чтобы освободить память, когда она была выполнена.

В примере кода выше, предполагает, что максимальный размер строки не будет превышать значение SIZE, то есть 10 байт в длину ...

Не выходить за границы двойного указателя, как он будет врезаться

+0

Я сделал то же самое. Но в main() я пишу: - для (i = 0; i anonymous

+0

@JMSA: 'for (i = 0; i t0mm13b

1

pls dont typecast return malloc, вы не включили <stdlib.h> и, как указал выше, отсутствие прототипа приведет к тому, что int будет отправлен на char **. Несчастливо ваша программа может или не может работать вообще.

+0

Но вопрос даже не использует' malloc'? Это, похоже, не отвечает на вопрос вообще. –

+0

мой плохой, моя ссылка была на сообщение tommieb. –