Я написал небольшой код, который печатает текущую дату в определенном формате.Чтобы вернуть все данные даты (день недели, день месяца, название месяца и т. Д.), Я использую функции типа const char *, которые передаютданные в виде строки для переменной, которая служит буфером, а затем передает буфер основной функции.
Следующий код представляет работу моей программы очень простым способом:
#include <stdio.h>
#include <string.h>
char
buff[16];
const char
*printStr1 (char *str1)
{
strncpy(buff, str1, sizeof(str1));
return buff;
};
const char
*printStr2 (char *str2)
{
strncpy(buff, str2, sizeof(str2));
return buff;
};
int
main()
{
printf("%s%s", printStr1("foo"), printStr2("bar"));
return 0;
}
Моя проблема заключается в следующем: при передаче всех данных в буфер и возврате их в основную функцию последние два данных совпадают (последние данные не печатаются, вместо этого выводится то, что уже было в буфере, то есть, вторые последние данные).
Это происходит только тогда, когда я использую одну функцию printf () , чтобы показать все данные, как в примере выше.Если я не использую буфер для возврата данных (я напрямую возвращаю аргумент, переданный функции) или использую printf () для всех данных, все выполняется правильно.
PS : я пытался решить эту проблему, используя такие функции, как memset () , чтобы очистить буфер, но он не работает, единственное, что я могу сделать, - это использовать отдельный буфер для каждой информации (для каждой функции).
Надеюсь, я хорошо выразил свою проблему.