2013-09-29 3 views
0

Я хочу создать статический массив строки в функции, тогда возвращаемое значение этой функции назначит другому массиву строки.Как вернуть массив строки в функцию?

, но кажется, что я не могу выполнить это задание array2 = function();, но я думаю, что использование char * для array of string в порядке? что случилось в моем коде? благодаря

вот мой код

#include <stdio.h> 
#include <stdlib.h> 

char * function(); 
int main(){ 

    char * array2[100] = {}; 
    array2 = function(); 

    // print this array of string 
    int i; 
    for(i=0;i<strlen(array2);i++){ 
     printf("%s\n",array2[i]); 
    } 
    system("pause"); 
} 

char * function(){ 
    static char * array[100] = {}; 
    array[0] = "100"; 
    array[1] = "200"; 
    return array; 
} 
+2

не уверен, если это является частью проблемы, но вы определили прототип 'funtion' перед тем главным, но в основном, вы обратитесь к' function' – smac89

+0

вы возвращаете статический символ * тип, но ваша функция возвращает тип char * – Tonmoy

+1

As отмеченные другими комментариями, этот код даже не компилируется. Какой компилятор вы используете? Предупреждающие сообщения о компиляторе при создании этого кода? У вас есть предупреждения о компиляторе на максимальном уровне? Сначала вы должны проверить все это - тогда компилятор практически решит эту проблему для вас. –

ответ

2

Вы должны использовать char** или char* array[] для массива строк.

В вашем function(), array - это первый адрес массива char*. Прототип должен быть char **function().

И я не думаю, что имя массива может быть changed.Say int a[3], b[3];, a постоянная, так a = b не допускается.

Будьте осторожны с орфографическими ошибками, такими как funtion()function().

0

Существует много способов решить вашу проблему. Вроде бы похоже на эти вопросы [общие массивы] [1] [String массивы] [2]

Или вы можете передать массив, а и получить его работу, как этот

#include "stdafx.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include "string.h" 

using namespace std; 

void function(char *input[100]){ 
    input[0] = "100"; 
    input[1] = "200"; 
} 
int main(){ 

    char * array2[100]; 
    function(array2); 

    // print this array of string (int)strlen(*array2) 
    int i; 
    for(i=0;i<(int)strlen(*array2) - 1;i++){ 
     printf("%s\n",array2[i]); 
    } 
    system("pause"); 
} 
+1

Этот вопрос отмечен C не C++, поэтому 'using namespace std;' не работает; это C++. Вы должны быть последовательны в использовании '#include ', а не в форме с двойными кавычками. Непонятно, зачем вам '#include" stdafx.h ", поскольку в коде используются только стандартные функции C. Управление петлей в цикле 'for' нарушено; вы не должны использовать 'strlen()' там вообще. –

+0

с использованием пространства имен и stdafx - из-за IDE. Я просто хочу проиллюстрировать суть этого кода ... Я думаю, что человек, который задал этот вопрос, получит указатели, чтобы изучить больше, а не полный ответ. @JonathanLeffler, можете ли вы объяснить свою мысль о strlen? как он сломан и он эксплуатируется? – virusrocks

+2

Вы не должны позволять вашей среде IDE вмешиваться в ваш код (но я предвзято отношусь к IDE в целом, поэтому обращайтесь с соответствующей осторожностью). Однако, написание кода на C++ в ответ на вопрос C всегда будет беспокоить вас. Проблемы с 'strlen()' в контексте состоят в том, что он возвращает 3 (потому что в «100» есть 3 цифры), но печатаются только две строки (остальные указатели равны нулю). Длина строки 'index [0]' не связана с количеством строк в массиве. Даже если бы это была правильная функция, вы не использовали бы ее там. –

1

Я бы сделать что-то вроде этого:

#include <stdio.h>               
#include <stdlib.h>               

static char **function(void)             
{                    
    char **array = malloc(2 * sizeof(*array));        
    array[0] = "100";               
    array[1] = "200";               
    return array;                
}                    

int main(int argc, char *argv[])            
{                    
    char **array2;               
    array2 = function();              

    /* print this array of string */           
    int i;                 
    for (i = 0; i < 2; i++)             
     printf("%s\n",array2[i]);            

    free(array2);                

    return 0;                 
} 
Смежные вопросы