c - Why use const char *prt1 when we can't change the containing of the pointer -


if use example:

   char* strs[2];     strs[1] = "hello";     strs[2] = "world!";     strcat(strs[1],strs[2]); 

then access violation comes (access violation writing location 0x0028cc75).

so why use const char *strs[2]; since strs1[1], strs1[2] cannot changed?

two sources of access violation in case

  1. string literals read , writing them undefined behavior

  2. in c arrays 0 index based, strs[2] not exist, strs[0] , strs[1].

using const prevents accidentally modifying them, not forbid you.

arrays modifiable though,

#include <stdio.h> #include <string.h>  int main(void)  {     char strs[2][11] = {"hello", "world"};     strcat(strs[0], strs[1]);     return 0;  } 

the above works expected it.

here how correctly dynamic allocation

#include <stdio.h> #include <string.h> #include <stdlib.h>  char * autostrcat(const char *const head, const char *const tail)  {     char  *result;     size_t headlen;     size_t taillen;      if ((head == null) || (tail == null))         return null;      headlen = strlen(head);     taillen = strlen(tail);     result  = malloc(1 + headlen + taillen);     if (result == null)         return null;     memcpy(result, head, headlen);     memcpy(&result[headlen], tail, taillen);      result[headlen + taillen] = '\0';     return result;  }  int main(void)  {     const char *strs[2] = {"hello", "world"};     char *result = autostrcat(strs[0], strs[1]);     if (result != null)         printf("%s\n", result);     free(result);     return 0;  } 

since used strlen() know lengths of strings are, using strcat() unecessarily expensive because again figure out length of first string strlen() does.


Comments

Popular posts from this blog

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

node.js - Using Node without global install -

java - JavaScript + Thymeleaf - select onchange -