Передача массива строк как аргумент функции - PullRequest
1 голос
/ 29 сентября 2019

Я пытаюсь передать массив строк в функцию, а затем распечатать его там.Но это дает ошибку сегментации.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char *str[2];
    for(int i=0;i<2;i++) {
            scanf("%s",(str+i));
    }
    display(str);
}

void display(char **p)
{
    for(int i=0;i<2;i++) {
            printf("%s \n",p[i]);
    }
}

Ответы [ 3 ]

0 голосов
/ 29 сентября 2019

Мне кажется, проблема в том, что вы не выделяете память для своего списка.Вот пример кода, который я сделал.

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

#define LIST_SIZE 2
#define MAX_WORD 100

void display(char**);

int main() {
    char buffer[100];
    char** list;
    int i;
    int n;

    // allocate
    list = (char**)malloc(sizeof(char*) * LIST_SIZE);

    for(i = 0; i < LIST_SIZE; i++) {
        scanf("%99s",buffer);
        n = strlen(buffer);
        list[i] = (char*)malloc(sizeof(char) * n);
        strcpy(list[i], buffer);
    }

    display(list);

    return 0;
}

void display(char** str) {
    int i;
    printf("-- output ---\n");
    for(i = 0; i < LIST_SIZE; i++) {
        printf("%s\n", str[i]);
    }
}

Я сделал список только выделить место, необходимое для слова.Если вы хотите исправить, вам не нужен буфер и strcpy.

0 голосов
/ 29 сентября 2019

Для начала вам необходимо внести следующие изменения в функцию «дисплей» ....

printf("%s \n",p+i);

Кроме того, функцию «дисплей» необходимо поместить над «основным» или вынеобходимо объявить прототип для функции.

0 голосов
/ 29 сентября 2019

Как насчет этого:

void display(char * p[])

Таким образом, вы можете передать аргумент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...