From: Mohammed Khalid Ansari <khalid@ncst.ernet.in>
To: Glynn Clements <glynn.clements@virgin.net>
Cc: linux c programming mailing list <linux-c-programming@vger.kernel.org>
Subject: Re: strange behavious
Date: Tue, 24 Dec 2002 10:50:25 +0530 (IST) [thread overview]
Message-ID: <Pine.LNX.4.33.0212241046350.31854-100000@soochak.ncst.ernet.in> (raw)
In-Reply-To: <15878.50935.669096.783873@cerise.nosuchdomain.co.uk>
On Mon, 23 Dec 2002, Glynn Clements wrote:
>
> Mohammed Khalid Ansari wrote:
>
> > I was running a simple program to test two dimensional pointer. When I
> > compiled it and executed, it received segmentaion fault, but when I
> > checked it in debugger step by step, it went smoothly and produced the
> > expected output. I did it many times and got the same behavious. Following
> > is my program
> >
> > ###################
> >
> > #include <stdio.h>
> >
> > void parse (char **);
> > char *words[] = {"mohammed", "khalid", "ansari"};
>
> While the array of pointers will be mutable, the strings themselves
> aren't; if you attempt to modify them, you will get a segmentation
> fault.
>
Is this in ANSI C? Will you please elaborate why is it so with this array
only and how it is different from the example you have given below because
ultimately both examples are same ie array of pointers.
As far as I know if there is an string in a code with sufficient memory,
it can be overwritten unless it is static.
> You need to either:
>
> 1. replace the array of pointers with an array of arrays instead,
> e.g.:
>
> char words[20][] = {"mohammed", "khalid", "ansari"};
>
> or:
>
> 2. explicitly allocate mutable storage for the strings, e.g.:
>
> static char word1[] = "mohammed";
> static char word2[] = "khalid";
> static char word3[] = "ansari";
> char *words[] = {word1, word2, word3};
>
> Or you could just explicitly declare the type of the array elements as
> "pointer to const char" rather than just "pointer to char", i.e.
>
> const char *words[] = {"mohammed", "khalid", "ansari"};
>
> This should give you a compile-time error for the illegal code rather
> than a run-time segfault.
>
> Other alternatives involve:
>
> 1. Targeting MS-DOS (which doesn't provide any memory protection, so
> *everything* is writable), or
>
> 2. Requiring the user to provide the appropriate compiler switches to
> make string literals writable (e.g. "-fwritable-strings" for gcc).
>
> However, it's better to just make your code portable.
>
>
next prev parent reply other threads:[~2002-12-24 5:20 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-12-21 5:25 strange behavious Mohammed Khalid Ansari
2002-12-23 8:19 ` Glynn Clements
2002-12-24 5:20 ` Mohammed Khalid Ansari [this message]
2002-12-25 9:50 ` Glynn Clements
[not found] ` <Pine.LNX.4.33.0212241046350.31854-100000@soochak.ncst.erne t.in>
2002-12-24 10:12 ` Stephen Satchell
2002-12-25 12:28 ` Mohammed Khalid Ansari
2002-12-25 13:58 ` Glynn Clements
[not found] ` <Pine.LNX.4.33.0212251757430.11856-100000@soochak.ncst.erne t.in>
2002-12-25 21:39 ` Stephen Satchell
-- strict thread matches above, loose matches on Subject: below --
2002-12-23 8:27 Alvarez Alberto-AALVARB1
2002-12-24 5:15 ` Mohammed Khalid Ansari
2002-12-25 9:55 ` Glynn Clements
2002-12-25 12:31 ` Mohammed Khalid Ansari
2002-12-25 13:44 ` Glynn Clements
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.33.0212241046350.31854-100000@soochak.ncst.ernet.in \
--to=khalid@ncst.ernet.in \
--cc=glynn.clements@virgin.net \
--cc=linux-c-programming@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).