C++-strlen求字符串长度

C++-strlen求字符串长度

晚风撩人 发布于 2017-02-19 字数 552 浏览 1331 回复 4
#include <stdio.h>
main()
{
char *a="ATSn0121";
char *b="ATSn0121";
char *c="ATSn0121";
char *d="ATSn121";
char *e="ATSn''121";
char f[1]={'c'};
char g[2]={'c',0x00};
printf("%dn",strlen("ATSn0121\"));
printf("%dn",strlen(a));
printf("%dn",strlen(b));
printf("%dn",strlen(c));
printf("%dn",strlen(d));
printf("%dn",strlen(e));
printf("%dn",strlen(f));
printf("%dn",strlen(g));
}

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

清晨说ぺ晚安 2017-09-22 4 楼

strlen函数详细解释:

size_t strlen ( const char * str );
Get string length
Returns the length of str.

The length of a C string is determined by the terminating null-character: A C string is as long as the amount of characters between the beginning of the string and the terminating null character (without including this terminating null character).

This should not be confused with the size of the array that holds the string. For example:

char mystr[100]="test string";
defines an array of characters with a size of 100 chars, but the C string with which mystr has been initialized has a length of only 11 characters. Therefore, while sizeof(mystr) evaluates to 100, strlen(mystr) returns 11.

其实关于strlen(f),因为会越界,直到遇到内存中的一个''而结束,所以其值是不可确定的。
看如下代码:

char j[8] = {'a','b','c','d','e','f','g','h'};
char k[9] = {'a','b','c','d','e','f','g','h','i'};

在VS2008上运行一个输出17,一个输出37.

晚风撩人 2017-09-14 3 楼

我就只解释一下f为什么是12。其他reddevillg已经解释了

因为f只有一个元素,没存,所以strlen会一直向后读到为之。而f开始向后是什么呢?是abcde这几个四字节的指针(32位环境)。strlen以后读到的是指针值的每一个字节。在little-endian的机器上我推测c地址值的头两位是00,你可以试一下。

PS:可能链接器开启了随机基址,每次的结果都不一样。

甜柠檬 2017-07-18 2 楼

要考虑"'结束字符串的问题,也要考虑的转意字符的问题,如果字符串中没有'',将会得到一个不确定的值。

泛泛之交 2017-02-24 1 楼

strlen就是扫描到'',也就是0x00结束。
上面输出的结果都是因为ooo(o为八进制数)转义的原因。