【发布时间】:2015-11-26 12:21:42
【问题描述】:
我有两个程序。两者都从字符串文字初始化数组。在一种情况下,数组大小正是我想要放入数组中的字符数。
我想知道为什么strlen() 返回的大小输出对于两个程序都不同。是因为缺少终止空字符吗?如果是,那为什么输出是 16?
#include<stdio.h>
#include<string.h>
main()
{
char str[5] = "ankit";
printf("size of = %d \n ",sizeof(str));
int len = strlen(str);
printf("length = %d \n ",len);
}
输出:- size of = 5 , length = 16
#include<stdio.h>
#include<string.h>
main()
{
char str[] = "ankit";
printf("size of = %d \n ",sizeof(str));
int len = strlen(str);
printf("length = %d \n ",len);
}
输出:- size of = 6,length = 5
【问题讨论】:
-
你需要学习 C 字符串和空终止。
-
如果一直走直线,为什么最后会掉进水里?
-
如果数组不包含空终止符,则它不是字符串。
strlen()与字符串一起使用,因此将这样的数组发送到strlen()是未定义的行为。 -
空终止符告诉 C 当前字符串在哪里结束。如果没有,您的字符串将继续运行,直到您在内存中的其他地方遇到空终止符或您的程序崩溃。