Передача локального буфера в функцию - PullRequest
0 голосов
/ 15 июля 2011

Я передаю локальный буфер функции:

void func1()
{
    char buffer[128];
    func2(buffer); 
}

void func2(char *buff)
{
     strcpy(buff, "Some String");
}

Теперь, когда я смотрю на значение buff после вызова функции, он просто имеет "S", а остальные пустые.

Теперь, если я сделаю буфер глобальным или статическим, тогда я могу передать всю строку.

Мой вопрос здесь заключается в том, что мы передаем адрес буфера функции, поэтому не должно иметь значения,локальный или глобальный.Но в случае объявления как локального я не возвращаю данные в свой буфер.

Ответы [ 4 ]

2 голосов
/ 15 июля 2011

Когда вы говорите «значение * buff» в отладчике, вы понимаете, что это всего лишь один символ строки, верно?Остальные символы находятся рядом с ним в стеке.

Я не собираюсь беспокоиться о запуске этого кода.Все остальные здесь говорят, что он работает просто отлично.

2 голосов
/ 15 июля 2011

Поскольку вы объявили свой буфер в стеке, он не определен после выхода из func1. Однако, если вы объявите его глобальным или статическим, область его действия не будет ограничена вызовом функции, и, таким образом, вы сможете продолжить доступ к нему. Наличие адреса буфера магическим образом не делает его содержимое действительным.

0 голосов
/ 17 июля 2011

Не очевидно, что здесь не так, но, поскольку вы пометили вопрос "RTOS", возможно, стек этой задачи слишком мал для размещения массива размером 128 байт?

0 голосов
/ 15 июля 2011

Ваш код в порядке - как вы смотрите на содержимое буфера? Если вы добавите printf("%s\n", buffer) в конце func1(), вы увидите, что он работает просто отлично.

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