Как передать значение массива char в функцию в другом файле в C? - PullRequest
0 голосов
/ 24 февраля 2019

В настоящее время я переписываю интерпретатор, над которым я работал в C. Я привык к языкам более высокого уровня, таким как C #, так что C сейчас немного смущает меня.

Я написал функцию, которая обнаруживает текущую операционную систему и сохраняет либо «WINDOWS», «LINUX» или «MAC» в массиве символов, но мне нужно передать это значение функции в другом файле.Код выглядит следующим образом:

//main.c
#include <stdio.h>
#include "interpreter.h"

#define OS_STR_MAX 8

extern void interpreterInit(char currentOS[]);

int main(int argc, char const *argv[]){
    char currentOperatingSystem[OS_STR_MAX];
    ...
    interpreterInit(currentOperatingSystem);

    return 0;
}

Проблема в том, что когда я передаю значение функции, все, что сохраняется, это символы ANSII.Я искал часы и не могу найти решение.

//interpreter.h
#include <stdio.h>

void interpreterInit(char currentOS[]){
    ...
}

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 24 февраля 2019

Вы можете выделить массив символов в памяти и поделиться его указателем с любым, что вы хотите.Это будет работать только во время работы программы.

Например, в main.c вы можете написать:

char * ptr = malloc( array_size * sizeof(char) );

Для этой функции вам потребуется #include <stdlib.h>.Это выделит массив из array_size символов в памяти.ptr будет указывать на его начало.

Вы можете использовать любую нужную строку, используя функцию strdup:

ptr = strdup( currentOperatingSystem );

Для этой функции вам потребуется #include <string.h>.Затем вы можете передать созданный нами указатель на любую функцию, какую захотите.Например:

interpreterInit( ptr );

Эта функция получит указатель ptr, который указывает на нужную нам строку.Для получения дополнительной информации о динамически распределенной памяти и строках для указателей вы можете проверить эту ссылку

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