DEC C
Run-Time Library Reference Manual for OpenVMS Systems


Previous Contents Index


#include <stdlib.h> 
#include <stdio.h> 
#include <locale.h> 
#include <monetary.h> 
#include <errno.h> 
 
#define MAX_BUF_SIZE 124 
 
main() 
{ 
    ssize_t     ret; 
    char        buffer[MAX_BUF_SIZE]; 
    double      amount = 102593421; 
 
     /* Display a monetary amount using the en_US.ISO8859-1 locale 
     * and a range of different display formats. 
     */ 
 
    if (setlocale(LC_ALL, "en_US.ISO8859_1") == (char*)NULL) { 
        perror("setlocale"); 
        exit(EXIT_FAILURE); 
    } 
    ret = strfmon(buffer, MAX_BUF_SIZE, "International: %i\n", amount); 
    printf(buffer); 
 
    ret = strfmon(buffer, MAX_BUF_SIZE, "National:      %n\n", amount); 
    printf(buffer); 
 
    ret = strfmon(buffer, MAX_BUF_SIZE, "National:      %=*#10n\n", amount); 
    printf(buffer); 
 
    ret = strfmon(buffer, MAX_BUF_SIZE, "National:      %(n\n", -1 * amount); 
    printf(buffer); 
 
    ret = strfmon(buffer, MAX_BUF_SIZE, "National:      %^!n\n", amount); 
    printf(buffer); 
 
} 

Running the example program produces the following result:


International: USD 102,593,421.00 
National:      $102,593,421.00 
National:      $**102,593,421.00 
National:      ($102,593,421.00) 
National:      102593421.00 


strftime

Uses date and time information stored in a tm structure, to create an output string. The format of the output string is controlled by a format string.

Format

#include <time.h>

size_t strftime (char *s, size_t maxsize, const char *format, const struct tm *timeptr);

Function Variants Compiling with the _DECC_V4_SOURCE and _VMS_V6_SOURCE feature-test macros defined enables a local-time-based entry point to this function that is equivalent to the behavior before OpenVMS Version 7.0.

ARGUMENTS

s

A pointer to the resultant string.

maxsize

The maximum number of bytes to be stored in the resultant string.

format

A pointer to a string that controls the format of the output string.

timeptr

A pointer to the local time structure. The tm structure is defined in the <time.h> header file.

DESCRIPTION

This function uses data in the structure pointed to by timeptr to create the string pointed to by s. A maximum of maxsize bytes is copied to s.

The format string consists of zero or more conversion specifications and ordinary characters. All ordinary characters (including the terminating null character) are copied unchanged into the output string. A conversion specification defines how data in the tm structure is formatted in the output string.

A conversion specification consists of a percent (%) character followed by one or more optional characters (see Table REF-7), and concluding with a conversion specifier (see Table REF-8). If any of the optional characters listed in Table REF-7 are specified, they must appear in the order shown in the table.

The strftime function behaves as if it called tzset .

Table REF-7 Optional Elements of strftime Conversion Specifications
Element Meaning
-- Optional with the field width to specify that the field is left-justified and padded with spaces. This cannot be used with the 0 element.
0 Optional with the field width to specify that the field is right-justified and padded with zeros. This cannot be used with the -- element.
field width A decimal integer that specifies the maximum field width
.precision A decimal integer that specifies the precision of data in a field.

For the d, H, I, j, m, M, o, S, U, w, W, y and Y conversion specifiers, the precision specifier is the minimum number of digits to appear in the field. If the conversion specification has fewer digits than that specified by the precision, leading zeros are added.

For the a, A, b, B, c, D, E, h, n, N, p, r, t, T, x, X, Z, and % conversion specifiers, the precision specifier is the maximum number of characters to appear in the field. If the conversion specification has more characters than that specified by the the precision, characters are truncated on the right.

The default precision for the d, H, I, m, M, o, S, U, w, W, y and Y conversion specifiers is 2; the default precision for the j conversion specifier is 3.

Note that the list of conversion specifications in Table REF-7 are extensions to the XPG4 specification.

Table REF-8 lists the conversion specifiers. The strftime function uses fields in the LC_TIME category of the program's current locale to provide a value. For example, if %B is specified, the function accesses the mon field in LC_TIME to find the full month name for the month specified in the tm structure. The result of using invalid conversion specifiers is undefined.

Table REF-8 strftime Conversion Specifiers
Specifier Replaced by
a The locale's abbreviated weekday name
A The locale's full weekday name
b The locale's abbreviated month name
B The locale's full month name
c The locale's appropriate date and time representation
C The century number (the year divided by 100 and truncated to an integer) as a decimal number (00 -- 99)
d The day of the month as a decimal number (01 -- 31)
D Same as %m/%d/%y
e The day of the month as a decimal number (1 -- 31) in a 2 digit field with the leading space character fill
Ec The locale's alternative date and time representation
EC The name of the base year (period) in the locale's alternative representation
Ex The locale's alternative date representation
EX The locale's alternative time representation
Ey The offset from the base year (%EC) in the locale's alternative representation
EY The locale's full alternative year representation
h Same as %b
H The hour (24-hour clock) as a decimal number (00 -- 23)
I The hour (12-hour clock) as a decimal number (01 -- 12)
j The day of the year as a decimal number (001 -- 366)
m The month as a decimal number (01 -- 12)
M The minute as a decimal number (00 -- 59)
n The newline character
Od The day of the month using the locale's alternative numeric symbols
Oe The date of the month using the locale's alternative numeric symbols
OH The hour (24-hour clock) using the locale's alternative numeric symbols
OI The hour (12-hour clock) using the locale's alternative numeric symbols
Om The month using the locale's alternative numeric symbols
OM The minutes using the locale's alternative numeric symbols
OS The seconds using the locale's alternative numeric symbols
Ou The weekday as a number in the locale's alternative representation (Monday=1)
OU The week number of the year (Sunday as the first day of the week) using the locale's alternative numeric symbols
OV The week number of the year (Monday as the first day of the week) as a decimal number (01 --53) using the locale's alterntative numeric symbols. If the week containing January 1 has four or more days in the new year, it is considered as week 1. Otherwise, it is considered as week 53 of the previous year, and the next week is week 1.
Ow The weekday as a number (Sunday=0) using the locale's alternative numeric symbols
OW The week number of the year (Monday as the first day of the week) using the locale's alternative numeric symbols
Oy The year without the century using the locale's alternative numeric symbols
p The locale's equivalent of the AM/PM designations associated with a 12-hour clock
r The time in AM/PM notation
R The time in 24-hour notation (%H:%M)
S The second as a decimal number (00 -- 61)
t The tab character
T The time (%H:%M:%S)
u The weekday as a decimal number between 1 and 7 (Monday=1)
U The week number of the year (the first Sunday as the first day of week 1) as a decimal number (00 -- 53)
V The week number of the year (Monday as the first day of the week) as a decimal number (00 -- 53). If the week containing January 1 has four or more days in the new year, it is considered as week 1. Otherwise, it is considered as week 53 of the previous year, and the next week is week 1.
w The weekday as a decimal number (0 [Sunday] -- 6)
W The week number of the year (the first Monday as the first day of week 1) as a decimal number (00 -- 53)
x The locale's appropriate date representation
X The locale's appropriate time representation
y The year without century as a decimal number (00 -- 99)
Y The year with century as a decimal number
Z Time-zone name or abbreviation. If time-zone information is not available, no character is output.
% %


Return Values

x The number of characters placed into the array pointed to by s, not including the terminating null character.
0 Indicates an error occurred. The contents of the array are indeterminate.

Example


#include <stdlib.h> 
#include <stdio.h> 
#include <time.h> 
#include <locale.h> 
#include <errno.h> 
 
#define NUM_OF_DATES  7 
#define BUF_SIZE 256 
 
/* 
 * This program formats a number of different dates, once using the C 
 * locale and then using the fr_FR.ISO8859-1 locale.  Date and time 
 * formatting is done using strftime(). 
 */ 
 
main() 
{ 
    int  count, i; 
    char buffer[BUF_SIZE]; 
    struct tm *tm_ptr; 
    time_t time_list[NUM_OF_DATES] = {500, 68200000, 694223999, 694224000, 
                                          704900000, 705000000, 705900000}; 
 
    /* Display dates using the C locale */ 
    printf("\nUsing the C locale:\n\n"); 
 
    setlocale(LC_ALL, "C"); 
 
    for (i=0; i < NUM_OF_DATES; i++) { 
        /* Convert to a tm structure */ 
        tm_ptr = localtime(&time_list[i]); 
 
        /* Format the date and time */ 
        count = strftime(buffer, BUF_SIZE, "Date: %A %d %B %Y%nTime: %T%n%n", 
                                                                tm_ptr); 
        if (count == 0) { 
            perror("strftime"); 
            exit(EXIT_FAILURE); 
        } 
 
        /* Print the result */ 
        printf(buffer); 
    } 
 
    /* Display dates using the fr_FR.ISO8859-1 locale */ 
    printf("\nUsing the fr_FR.ISO8859-1 locale:\n\n"); 
 
    setlocale(LC_ALL, "fr_FR.ISO8859-1"); 
 
    for (i=0; i < NUM_OF_DATES; i++) { 
        /* Convert to a tm structure */ 
        tm_ptr = localtime(&time_list[i]); 
 
        /* Format the date and time */ 
        count = strftime(buffer, BUF_SIZE, "Date: %A %d %B %Y%nTime: %T%n%n", 
        tm_ptr); 
        if (count == 0) { 
            perror("strftime"); 
            exit(EXIT_FAILURE); 
        } 
 
        /* Print the result */ 
        printf(buffer); 
    } 
} 

Running the example program produces the following result:


Using the C locale: 
 
Date: Thursday 01 January 1970 
Time: 00:08:20 
 
Date: Tuesday 29 February 1972 
Time: 08:26:40 
 
Date: Tuesday 31 December 1991 
Time: 23:59:59 
 
Date: Wednesday 01 January 1992 
Time: 00:00:00 
 
Date: Sunday 03 May 1992 
Time: 13:33:20 
 
Date: Monday 04 May 1992 
Time: 17:20:00 
 
Date: Friday 15 May 1992 
Time: 03:20:00 
 
 
Using the fr_FR.ISO8859-1 locale: 
 
Date: jeudi 01 janvier 1970 
Time: 00:08:20 
 
Date: mardi 29 février 1972 
Time: 08:26:40 
 
Date: mardi 31 décembre 1991 
Time: 23:59:59 
 
Date: mercredi 01 janvier 1992 
Time: 00:00:00 
 
Date: dimanche 03 mai 1992 
Time: 13:33:20 
 
Date: lundi 04 mai 1992 
Time: 17:20:00 
 
Date: vendredi 15 mai 1992 
Time: 03:20:00 


strlen

Returns the length of a string of ASCII characters. The returned length does not include the terminating null character (\0).

Format

#include <string.h>

size_t strlen (const char *str);


ARGUMENT

str

A pointer to the character string.

Return Value

x The length of the string.

strncasecmp

Does a case-insensitive comparison between two 7-bit ASCII strings.

Format

#include <strings.h>

int strncasecmp (const char *s1, const char *s2, size_t n);


ARGUMENTS

s1

The first of two strings to compare.

s2

The second of two strings to compare.

n

The maximum number of bytes in a string to compare.

DESCRIPTION

This function is case-insensitive. The returned lexicographic difference reflects a conversion to lowercase. The strncasecmp function is similar to the strcasecmp function, but also compares size. If the size specified by n is read before a NULL, the comparison stops.

The strcasecmp function works for 7-bit ASCII compares only. Do not use this function for internationalized applications.


Return Values

n An integer value greater than, equal to, or less than 0 (zero), depending on whether s1 is greater than, equal to, or less than s2.

strncat

Appends not more than maxchar characters from str_2 to the end of str_1.

Format

#include <string.h>

char *strncat (char *str_1, const char *str_2, size_t maxchar);

Function Variants This function also has variants named _strncat32 and _strncat64 for use with 32-bit and 64-bit pointer sizes, respectively. See Section 1.8 for more information on using pointer-size-specific functions.

ARGUMENTS

str_1, str_2

Pointers to null-terminated character strings.

maxchar

The number of characters to concatenate from str_2, unless strncat first encounters a null terminator in str_2. If maxchar is 0, no characters are copied from str_2.

DESCRIPTION

A null character is always appended to the result of the strncat function. If strncat reaches the specified maximum, it sets the next byte in str_1 to the null character.

Return Value

x The address of the first argument, str_1, which is assumed to be large enough to hold the concatenated result.

strncmp

Compares not more than maxchar characters of two ASCII character strings and returns a negative, 0, or positive integer, indicating that the ASCII values of the individual characters in the first string are less than, equal to, or greater than the values in the second string.

Format

#include <string.h>

int strncmp (const char *str_1, const char *str_2, size_t maxchar);


ARGUMENTS

str_1, str_2

Pointers to character strings.

maxchar

The maximum number of characters (beginning with the first) to search in both str_1 and str_2. If maxchar is 0, no comparison is performed and 0 is returned (the strings are considered equal).

DESCRIPTION

This function compares no more than maxchar characters from the string pointed to by str_1 to the string pointed to by str_2. The strings are compared until a null character is encountered, the strings differ, or maxchar is reached. Characters that follow a difference or a null character are not compared.

Return Values

< 0 Indicates that str_1 is less than str_2.
= 0 Indicates that str_1 equals str_2.
> 0 Indicates that str_1 is greater than str_2.

Examples

#1

#include <string.h> 
#include <stdio.h> 
 
$ create tmp.c 
    main() 
    { 
        printf( "%d\n", strncmp("abcde", "abc", 3)); 
    } 
    $ cc tmp.c 
 

When linked and executed, this example returns 0, because the first 3 characters of the 2 strings are equal:


$ run tmp 
        0 

#2

#include <string.h> 
#include <stdio.h> 
 
$ create tmp.c 
    main() 
    { 
        printf( "%d\n", strncmp("abcde", "abc", 4)); 
    } 
    $ cc tmp.c 
 

When linked and executed, this example returns a value greater than 0 because the first 4 characters of the 2 strings are not equal (The "d" in the first string is not equal to the null character in the second):


$ run tmp 
        100 


strncpy

Copies not more than maxchar characters from str_2 into str_1.

Format

#include <string.h>

char *strncpy (char *str_1, const char *str_2, size_t maxchar);

Function Variants This function also has variants named _strncpy32 and _strncpy64 for use with 32-bit and 64-bit pointer sizes, respectively. See Section 1.8 for more information on using pointer-size-specific functions.

ARGUMENTS

str_1, str_2

Pointers to character strings.

maxchar

The maximum number of characters to copy from str_2 to str_1 up to but not including the null terminator of str_2.

DESCRIPTION

This function copies no more than maxchar characters from str_2 to str_1, up to but not including the null terminator of str_2. If str_2 contains less than maxchar characters, str_1 is padded with null characters. If str_2 contains greater than or equal to maxchar characters, as many characters as possible are copied to str_1. Be aware that the str_1 argument might not be terminated by a null character after a call to strncpy .

Return Value

x The address of str_1.

strnlen

Returns the number of bytes in a string.

Format

#include <string.h>

size_t strnlen (const char *s, size_t n);


ARGUMENTS

s

Pointer to the string.

n

The maximum number of characters to examine.

DESCRIPTION

This function returns the number of bytes in the string pointed to by s. The string length value does not include the terminating null character. The strnlen function counts bytes until the first null byte or until n bytes have been examined.

Return Values

n The length of the string.

strpbrk

Searches a string for the occurrence of one of a specified set of characters.

Format

#include <string.h>

char *strpbrk (const char *str, const char *charset);

Function Variants This function also has variants named _strpbrk32 and _strpbrk64 for use with 32-bit and 64-bit pointer sizes, respectively. See Section 1.8 for more information on using pointer-size-specific functions.

ARGUMENTS

str

A pointer to a character string. If this character string is a null string, 0 is returned.

charset

A pointer to a character string containing the set of characters for which the function will search.

DESCRIPTION

This function scans the characters in the string, stops when it encounters a character found in charset, and returns the address of the first character in the string that appears in the character set.

Return Values

x The address of the first character in the string that is in the set.
NULL Indicates that no character is in the set.

strptime

Converts a character string into date and time values that are stored in a tm structure. Conversion is controlled by a format string.

Format

#include <time.h>

char *strptime (const char *buf, const char *format, struct tm *timeptr);

Function Variants This function also has variants named _strptime32 and _strptime64 for use with 32-bit and 64-bit pointer sizes, respectively. See Section 1.8 for more information on using pointer-size-specific functions.

ARGUMENTS

buf

A pointer to the character string to convert.

format

A pointer to the string that defines how the input string is converted.

timeptr

A pointer to the local time structure. The tm structure is defined in the <time.h> header file.

DESCRIPTION

This function converts the string pointed to by buf into values that are stored in the structure pointed to by timeptr. The string pointed to by format defines how the conversion is performed.


Previous Next Contents Index