【发布时间】:2014-10-08 22:54:03
【问题描述】:
一个非常基本的 C 问题。为什么以下两个命令会导致创建大小不同的字符串?
如下所示,方法 1 创建一个大小为 8 个字节的字符串,方法 2 创建一个大小为 5 个字节的字符串。
我很困惑为什么方法 1 会创建一个大小为 8 字节的字符串...
(我已经看过这些帖子:Difference of sizeof between char* x and char x[] 和 What is the difference between char s[] and char *s?。除非我有阅读理解失败,否则它并不能真正解决方法 1 创建大小为 8 字节的字符串的原因......根据对于响应,似乎方法 1 应该创建一个大小为 4 字节的指针。)
方法一:
char *string = "ABCD";
方法二:
char string2[5] = "ABCD";
例如,当我运行以下程序时,我得到如下所示的输出。
#include <stdio.h>
int main(int argc, char *argv[])
{
char *string = "ABCD";
printf("Based on \"char *string = \"ABCD\":\n");
printf("Size of string: %ld\n",sizeof(string));
printf("Size of each element of string: %ld\n",sizeof(string[0]));
printf("String: %s\n\n", string);
char string2[5] = "ABCD\0";
printf("Based on \"char string2[5] = \"ABCD\":\n");
printf("Size of string: %ld\n",sizeof(string2));
printf("Size of each element of string: %ld\n",sizeof(string2[0]));
printf("String: %s\n\n", string2);
return 0;
}
上述程序的输出:
【问题讨论】:
-
另外,对于
char string3[] = "ABCDE";(未声明大小)sizeof(string3) == 6(5 个字母 + nul)