| Title: | POSIX for OpenVMS - Public forum | 
| Notice: | Internal users of V2.0 please register in note 909 | 
| Moderator: | STAR::PARKE | 
| Created: | Fri Jan 04 1991 | 
| Last Modified: | Mon Jun 02 1997 | 
| Last Successful Update: | Fri Jun 06 1997 | 
| Number of topics: | 1370 | 
| Total number of notes: | 5127 | 
The following piece of code produces a segmentation violation error 
whenever it is executed on OpenVMS 6.2 and OpenVMS POSIX 2.0:
#include <stdio.h>
void demo (char *);
main ()
{
	demo ("Hello");
}
demo (char *s)
{
	*s = 'p';
}
This code doesn't produce any error on any UNIX, including ours.
What is wrong ? Will OpenVMS POSIX 3.0 help ?
Regards,
Julian Rodriguez
Digital Spain, UNIX Ambassador
 
| T.R | Title | User | Personal Name | Date | Lines | 
|---|---|---|---|---|---|
| 1364.1 | SPECXN::DERAMO | Dan D'Eramo | Tue Mar 25 1997 08:47 | 12 | |
|         You can't modify a string literal, which is what the demo()
        function is trying to do to the first character of the "Hello"
        string literal.  By default DEC C places string literals in
        read-only storage.  DEC C has a compiler command line
        qualifier /ASSUME=WRITABLE_STRING_LITERALS to override the
        default.  I'm not sure off hand what that look like in POSIX
        but "man c89" should show you.
        
        Under the ANSI C standard attempting to modify a string
        literal leads to undefined behavior.
        
        Dan
 | |||||
| 1364.2 | c89 -Wc,ASSUME=WRITABLE_STRING_LITERALS | MUCTEC::BECKER | Hartmut B., VMS & Languages, Munich | Wed Mar 26 1997 17:12 | 5 | 
|     After -Wc, you can pass any DCL-style qualifier with value(s) to the
    compiler.
    
    Hth,
    Hartmut
 | |||||