В Си, как символ *, переданный функции, может быть заполнен текстом? - PullRequest
0 голосов
/ 20 января 2011

Я пытаюсь создать функцию C, которая будет возвращать int, но в процессе заполнит символ *, переданный в качестве переменной. Основной пример того, что я пытаюсь сделать, это:

int myMethod(int input, char* output, int outMaxLen) {
    int outValue = input * 5;
    if (out < 10) strcat(output, "A small number");
    else if (out < 20) strcat(output, "A medium number");
    else strcat(output, "A large number");
}

В main.c:

char* myMethodOutput;
int myMethodInt = myMethod(2, myMethodOutput, 15);
printf("%d %s", myMethodInt, myMethodOutput);

При запуске целое число отображается на экране, а текст - нет.

Переменная outMaxLen предназначена для проверки параметра char *, чтобы убедиться, что он достаточно велик для размещения выходной строки.

Как и strcat (), я пробовал strcpy () и strncpy (), но все безрезультатно. strcat () не отображает текст на консоли, а strcpy () и strncpy () вызывают отладчик с сообщением EXC_BAD_ACCESS.

Я успешно справился с этим в Windows API с помощью функции strcpy_s, но сейчас я пытаюсь установить UNIX-систему. Я, наверное, упускаю что-то чрезвычайно фундаментальное!

Ответы [ 4 ]

6 голосов
/ 20 января 2011

Сначала вам нужно назначить некоторую память указателю, иначе вы просто записываете в какую-то случайную область памяти.например:

char *myMethodOutput = malloc(256);
/* ... etc ... */


free(myMethodOutput);
1 голос
/ 20 января 2011

Наименование параметра как «длина буфера», на самом деле, не создает буфер достаточно долго.

Вы не выделяете память для буфера; по крайней мере, в примере кода.

1 голос
/ 20 января 2011
char* myMethodOutput;

myMethodOutput = malloc(sizeof(char) * 200); //200 is example

не забудьте освободить, также myMethod() должно быть типа void

0 голосов
/ 20 января 2011

Вы должны выделить часть памяти для myMethodOutput с помощью malloc () или чего-то еще, прежде чем использовать ее. Писать в расположение неинициализированного указателя не очень хорошая идея.

...