字串常量和字元陣列的區分
阿新 • • 發佈:2019-01-08
首先我們來看個程式,這個程式說的是字串函式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";
這裡所初始化的就是一個字串常量。
這兩個初始化看上去很像,但是他們具有不同的含義,前者初始化的是一個字元陣列的元素,而後者則是一個真正的字串常量。這個指標變數被初始化為指向這個字串常量的儲存位置。