第2个回答 2012-03-17
strlen用来计算字符串的,直到碰到第一个字符串结束符'\0'为止,在你的数组p中,你没有给定数组长度,由于有3个字符,所以实际长度为3,但是由于没有'\0'结束,所以根据strlen的工作原理,你还是得不出它的实际长度,所以出现了未定义的结果。你可以用sizeof操作符。而q数组的长度为10,但是只存入了3个值,其它的元素都是\0,因此用strlen可以计算出它的实际长度。如果你将p找长度设为4,你会发现可以得出正确的结果!
第3个回答 2012-03-17
我在 linux下打印为 6, 3;
在因为在 p[] 的最后没有加上 '\0', 所以 strlen(p)时会把 Q中的字符也算上.
你试着把 Q中的 a,b,c 改为 D,E,F , 然后再 printf(p), 此时打印就为 abcDEF.
把 char p[]={'a','b','c', '\0'}, q[10]={'a','b','c', '\0'}; 即可.
或者不要那么费力,直接写为
char p[] = "abc" ; // 它会在后面加 '\0'; 此时sizeof(p) 为 4 ;
char Q[10] ="def" ;
结果就是你想要的.
第4个回答 2012-03-17
// Baidu.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "iostream"
#include "fstream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i=0;
char p[]={'a','b','c'},q[10]={'a','b','c'};
printf("%d %d\n",strlen(p),strlen(q));
//while(p[i]!='\0')
//{
// cout<<p[i]<<" ";
// i++;
//}
getchar();
getchar();
return 0;
}
按照你说的我也测试过了,我用vs2008平台输出的是12 3.。
首先可以看一下strlen()这个function,他是测试字符串的实际长度,现在我们是用字符数组当作字符串用,也就是把字符数组的首指针当做字符串的首指针,但是在不同平台中字符串的长度在一定的范围内是给定的,因为对于处理变长的字符串还是比较难的。所以测试的时候出现了这样的情况。你按照这个理解就好。
我另外测试了,像这种的情况,一般在vs2008中是实际长度+9,所以我测出来的是12。