Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22024

strerror_s,strcpy_s,localtime_s,sprintf_s not declared in this scope?

$
0
0

I have written a cross-platform code gives a current date(mm/dd/yy) and time(hh/mm/ss) and complete date(yyyymmdd), This code works in windows(MSVS2015) but not working in Linux(GCC 4.8.5).

My code is

#include <iostream> 
#ifdef WIN32
#include <windows.h>
#else
#include <cerrno>
#endif

#ifdef WIN32
#include <direct.h>
#include <io.h>
#else
#include <dirent.h>
#include <stdio.h>
#include <unistd.h>
#endif
#include <ctime>
#include <bitset>
#include <cstdlib>  /*atol*/
#include <iomanip>
#include <stdexcept>
#include <cstring>
#include <cstdio>
#include <fstream>
using namespace std;

template <size_t size>
void GetNowDateTime(char(&c_date)[size], char(&c_time)[size])
{
   time_t t;
   struct tm now;
   strcpy_s(c_date, "00/00/00");
   strcpy_s(c_time, "00:00:00");
   time(&t);
  if (localtime_s(&now, &t) != 0) return;
 char temp[3];
 sprintf_s(temp, "%.2d", now.tm_mon + 1);
 memcpy(c_date, temp, 2);
 sprintf_s(temp, "%.2d", now.tm_mday);
 memcpy(c_date + 3, temp, 2);
 sprintf_s(temp, "%.2d", now.tm_year - 100);
 memcpy(c_date + 6, temp, 2);
 sprintf_s(temp, "%.2d", now.tm_hour);
 memcpy(c_time, temp, 2);
 sprintf_s(temp, "%.2d", now.tm_min);
 memcpy(c_time + 3, temp, 2);
 sprintf_s(temp, "%.2d", now.tm_sec);
 memcpy(c_time + 6, temp, 2);
 }

  int GetToday(void)
  {
    time_t t;
    struct tm now;
    time(&t);
    if (localtime_s(&now, &t) != 0) return 0;
    return (now.tm_year + 1900) * 10000 + (now.tm_mon + 1) * 100 + now.tm_mday;
  }

 bool OpenOuputFile(ofstream& outputFile)
 {

  char buf[1024];

 #ifdef WIN32
   strcpy_s(buf, "C:\\Myfolder\\output.txt");
  #else
    strcpy_s(buf, "/home/myfolder/output.txt");
    #endif
    outputFile.open(buf, ios::out);

    if (!outputFile)
    {
    char szErrorMsg[1024];
    strerror_s(szErrorMsg, errno);
    cout << "Unable to open input file. "<< buf << " Error:"<< szErrorMsg << endl;
    return 0;
}
return 1;
}

//Here is my main function

int main()
{
char today[9];
char time[9];
ofstream outputFile;
GetNowDateTime(today, time);
int yyyymmdd = GetToday();
if (OpenOuputFile(outputFile))
{
    outputFile << "GetNowDateTime functions given is:-\t"<< today << "\t"<< time << endl;
    outputFile << "GetToday Function given is:-\t"<< yyyymmdd << endl;
   }
   else
    cout << "No output file written"<< endl;
return 0;
} 

Errors in Linux is

TimeDate.cpp: In function ‘void GetNowDateTime(char (&)[size], char (&)[size])’:

TimeDate.cpp:34:26: error: there are no arguments to ‘localtime_s’ that depend on a template parameter, so a declaration of ‘localtime_s’ must be available [-fpermissive]
  if (localtime_s(&now, &t) != 0) return;
TimeDate.cpp:36:40: error: there are no arguments to ‘sprintf_s’ that depend on a template parameter, so a declaration of ‘sprintf_s’ must be available [-fpermissive]
imeDate.cpp: In function ‘int GetToday()’:
TimeDate.cpp:55:26: error: ‘localtime_s’ was not declared in this scope
if (localtime_s(&now, &t) != 0) return 0;
TimeDate.cpp:74:31: error: ‘strerror_s’ was not declared in this scope
strerror_s(szErrorMsg, errno);
TimeDate.cpp:31:29: error: ‘strcpy_s’ was not declared in this scope
strcpy_s(c_date, "00/00/00");

This program runs on (windows )visual studio 2015 and(Linux) GCC 4.8.5.

I included all required headers but It showing errors when compiling in Linux.

why above errors showing in Linux, Please tell me.


Viewing all articles
Browse latest Browse all 22024

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>