Harry27 Ответов: 1

Вызов функции с полем struct, которое является массивом в качестве аргумента


Учитывая структуру:
typedef struct s {
    char words[30]
    char text[100]
} myS;

и функция:
void c(char *param)
{ 
    //code
}

и переменная:
myS a;


Что я уже пробовал:

Как бы я передал значение поля words структуры функции?
Я пытался
c(a.words);
но это говорит мне, что выражение должно иметь тип struct или union.

KarstenK

Это должно работать именно так. Покажите полный код и сообщение компилятора. Непонятно, что происходит не так.

1 Ответов

Рейтинг:
0

OriginalGriff

Вероятно, это недостающая точка с запятой в определении words - добавьте его, и он работает для меня:

typedef struct s {
    char words[30];
    char text[100];
} myS;

void c(char *param)
{ 
    *param = 'X';
}

myS a;
int main()
{
    strcpy(a.words, "one, two, three\n");
    strcpy(a.text, "Hello, good eveniong, and welcome.\n");
    c(a.words);
    c(a.text);    
    printf(a.words);
    printf(a.text);
    return 0;
}
Дать мне
Xne, two, three                                                                                                                                              
Xello, good eveniong, and welcome.                                                                                                                           
                                                                                                                                                             
                                                                                                                                                             
...Program finished with exit code 0                                                                                                                         
Press ENTER to exit console.                                   


Rick York

Я считаю, что текстовый элемент также нуждается в точке с запятой. Я добавила его сюда. :)

- edit - интересно, на меня ссылаются по моему номеру участника. Я такого раньше не видел. Обычно я вижу его для людей с 7 и 8-значными числами. Для меня это впервые.

OriginalGriff

Зависит от компилятора, но он не нужен им всем.
https://www.onlinegdb.com/online_c_compiler
Не парится об этом.

Rick York

Да, мой первый комментарий отметил, что VS2017 требует этого, по крайней мере. Я удивлен, что все они этого не делают.