Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

In the final strcat_nc() call, the compiler generates a warning about ateempting attempting to cast away const on str4. This is a valid warning.

...

Code Block
bgColor#ccccff
char *strcat(char *s1, char const *s2); 

char *str1 = "str1";
char const *str2 = "str2";
char str3[] = "str3";
char const str4[] = "str4";

strcat(str3, str2); 

/* Args reversed to prevent overwriting string literal */ 
strcat(str3, str1);  
strcat(str4, str3);  /* Compiler warns that str4 is const */

The const-\ qualification of the second argument s2 eliminates the spurious warning in the initial invocation, but maintains the valid warning on the final invocation in which a const-qualified object is passed as the first argument (which can change). Finally, the middle strcat() invocation is now valid, as str1 is a valid destination string, as the string exists on the stack and may be safely modified.

...