2016-07-26 4 views
0

В следующей программе я просто попытаюсь скопировать некоторую строку в массив и напечатать ее в другой функции.Как передать массив строк функции?

Я получаю ошибку сегментации. Может кто-то указать, что я сделал неправильно?

#include <stdio.h> 
    #include <string.h> 
    #define MAX_STR_LEN 20 

    void print_str(char str[][],int count); 

    int main() 
    { 
     char str[2][MAX_STR_LEN]; 
     strncpy(str[0],"hello",MAX_STR_LEN); 
     strncpy(str[1],"world",MAX_STR_LEN); 
     print_str(str,2); 
     return 0; 
    } 
    void print_str(char str[][],int count) 
    { 
     int i; 
     for(i=0;i<count;i++) 
     printf("%s\n",str[i]); 
    } 
+0

'void print_str (char str [] [], int count)' -> 'void print_str (char str [] [MAX_STR_LEN], int count)' – BLUEPIXY

+2

Если это не задокументировано в любом учебнике или книге, найти, найти другое. Параметр должен быть 'char str [] [MAX_STR_LEN]'. Объявляется все, кроме самого доминирующего размера массива массивов как параметр * must *. Есть, вероятно, * сотни * дубликатов этой проблемы в той или иной форме, но, как правило, название настолько разнообразно, что их сложно найти. Тот, который * close * будет [этот вопрос] (https://stackoverflow.com/questions/486075/passing-an-array-of-strings-as-parameter-to-a-function-in-c), в частности, * второй * ответ. – WhozCraig

+0

@Naveen Kumar Мне интересно, какой компилятор вы используете, потому что большинство из них я даже не компилирую этот код. – AnArrayOfFunctions

ответ

3

Нам нужно указать размер колонкиобязательным при прохождении 2D массив в качестве параметра.

Таким образом, вы должны объявить функцию следующим образом:

void print_str(char str[][MAX_STR_LEN],int count); 
1

Использование

void print_str(char str[][MAX_STR_LEN], int count); 
1

Обеспечить вторую длину измерения в массиве 2-D в C всегда. Длина первого измерения необязательна, если вы объявляете двухмерный массив.

Смежные вопросы