Как правильно написать функцию на C, возвращающую массив символов?

Я хорошо знаком с Java, но не так с C.

В Java, если у меня есть метод, который делает что-то и возвращает String, он будет выглядеть так:

private String doSomething(...) {
    String s;
    // do something;
    return s;
}

Синтаксический эквивалент в C не будет работать и будет просто неправильным:

char* doSomething(...) {
    char s[100];
    // do something;
    return s;
}

конечно, я могу сделать:

char* doSomething(...) {
    char *s;
    s = malloc(100 * sizeof(char));
    // do something;
    return s;
}

что будет работать (я думаю! ), но я редко встречаю коды с таким способом (может быть, потому что это излишне заполняет кучу?)

Чаще всего я вижу:

bool doSomething(char *s) {
    // do something that copies chars to s
    return true;
}

А вызывающие утверждения будут выглядеть так:

char s[100];
doSomething(s);

Что если я не знаю размер массива char до тех пор, пока не войду в саму функцию? Т.е. я не смогу объявить массив char вне функции и затем передать его.

Каким будет правильный способ справиться с таким сценарием?

16
задан GEOCHET 29 November 2011 в 15:02
поделиться