首先我们来看个程序,这个程序说的是字符串函数strcat()函数的实现:
#include<stdlib.h>
#include<assert.h>
#include<stdio.h>
#define MAX 20
char *my_strcat(char *dest, const char *src)
{
char * ret = dest;
assert(dest);
assert(src);
while (*dest)
{
dest++;
}
while (*dest = *src)
{
dest++;
src++;
}
return dest;
}
int main()
{
char arr1[MAX] = "abcd";
char *arr2 = "abcd";
my_strcat(arr1, arr2);
printf("%s\n", arr1);
system("pause");
return 0;
}
在这我们会有一个疑问:
char arr1[MAX] = "abcd";
char *arr2 = "abcd";
这个两个为什么要这样来进行初始化。
其实,第一行所初始化的是一个字符数组。
char arr1[MAX] = "abcd";
尽管他看上去像是一个字符串常量,但实际上并不是,他只是初始化列表的另外一种的写法。他是根据他们所处的上下文环境进行区分,当用于初始化一个字符数组时,他就是一个初始化列表,在其他地方,他都表示一个字符串常量
而第二句:
char *arr2 = "abcd";
这里所初始化的就是一个字符串常量。
这两个初始化看上去很像,但是他们具有不同的含义,前者初始化的是一个字符数组的元素,而后者则是一个真正的字符串常量。这个指针变量被初始化为指向这个字符串常量的存储位置。