字符数组和字符串的大小问题
#include <stdio.h>#include <string.h>
#include <stdlib.h>
void main()
{
char buf[] = {'a','b','c','d'};
int strl = strlen(buf);
int bufsize = sizeof(buf);
int i = 0;
printf("strl=%dbufsize=%d\n\n", strl, bufsize);
for (i = 0; i < strl; i++)
{
printf("%c\n",*(buf+i));
}
system("pause");
}
这段代码测量buf[]的大小,通过strlen和sizeof,执行结果如下
为什么strlen是11?多谢指教! 没有结束符的字符数组长度未知。
帮你改了一下代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char buf[] = {'a','b','c','d','\0'};
int strl = strlen(buf);
int bufsize = sizeof(buf);
for (int i = 0; i < strl; i++)
{
cout<<*(buf+i)<<endl;
}
cout<<strl<<endl;
cout<<bufsize<<endl;
return 0;
} strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含"\0")。
strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。 多谢啦!! heblhc 发表于 2016-8-22 18:05
多谢啦!!
不客气
页:
[1]