On Tue, Oct 09, 2007 at 08:33:59PM +0200, Philipp Matthias Hahn wrote: > Hello! > > On Tue, Oct 09, 2007 at 02:40:35PM +0200, Ahmed S. Darwish wrote: > > On Tue, Oct 09, 2007 at 01:55:42AM +0400, Dmitri Vorobiev wrote: > > > The patch below contains a small code clean-up for the NTFS driver: all > > > static char pointers to error message strings have been replaced by > > > static char arrays. > > char * a = "a"; // pointer and content can be changed
Only the pointer can be changed here. AFAIK "a" is a const string. > const char * b = "b"; // the thing pointed to is const The "const" here is redundant (just useful for forcing the compiler to prevent us from shooting our feet). The "b" string is already constant. > char * const c = "c"; // the pointer is const > const char * const d = "d"; // pointer and content can't be changed > > void foo(void) { > *a = 'A'; This will segfault. > a++; > *b = 'B'; // error: assignment of read-only location > b++; > *c = 'C'; Last line will segfault too. > c++; // error: increment of read-only variable 'c' > *d = 'D'; // error: assignment of read-only location > d++; // error: increment of read-only variable 'd' > } > Please continue below. > > Isn't the only difference between char *c = "msg" and char c[] = "msg" is > > that the first is a non-const pointer to a const char array while the > > second > > is a modifiable char array ? > > $ cat [ab].c > const char *a = "a"; > const char b[] = "b"; > $ gcc -c [ab].c > $ size [ab].o > text data bss dec hex filename > 2 4 0 6 6 a.o > 2 0 0 2 2 b.o > > 'a' has two entries: one for the named read-writeable pointer, and one for the > anonymous read-only string, the pointer points to. > 'b' has a single entry: just the named read-only string. > Got the point, Thanks!. -- Ahmed S. Darwish HomePage: http://darwish.07.googlepages.com Blog: http://darwish-07.blogspot.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/