...
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 | ||
|---|---|---|
| ||
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.
...