title: Pointer to char, different terminologies
body: <p>I used <code>strncat</code> several times, but just now check its formal definition in the standard:</p>
  
  <pre><code>#include &lt;string.h&gt;
  char *strncat(char * restrict s1,
       const char * restrict s2,
       size_t n);
  </code></pre>
  
  <blockquote>
    <p>The strncat function appends not more than n characters (a null character and characters that follow it are not appended) from the array pointed to by s2 to the end of the string pointed to by s1. The initial character of s2 overwrites the null character at the end of s1. A terminating null character is always appended to the result.</p>
  </blockquote>
  
  <p>Normally I would think of <code>s1</code> and <code>s2</code> simply as pointers to char. But as seen, the standard calls them differently:</p>
  
  <ul>
  <li>the string pointed to by <code>s1</code></li>
  <li>the array pointed to by <code>s2</code></li>
  </ul>
  
  <p>The only difference between <code>s1</code> and <code>s2</code> is a const qualifier - is that why one is called an <strong>array</strong> and the other called a <strong>string</strong>?</p>
  
  <p>Moreover, in the footnote:</p>
  
  <blockquote>
    <p>Thus, the maximum number of characters that can end up in the array pointed to by s1 is strlen(s1)+n+1.</p>
  </blockquote>
  
  <p>So here they refer to <code>s1</code> differently: an array (not a string) pointed by <code>s1</code></p>
  
  <p>Is there any implication of these different ways of calling <code>s1</code> and <code>s2</code>?</p>