注册 登录
编程论坛 C++教室

char A[200],然后初始化,为何strlen(A)等于203?

crazycoder 发布于 2008-11-26 14:54, 1687 次点击
#include <stdio.h>
#include <string.h>
void main()
{
    char * p = new char[10];
    printf("%d",strlen(p));
    delete [] p;
}
//输出结果为105,我把char[100]改为char[10]时,输出则是14,为什么?
//对strlen()了解的真是一知半解,谁能指点我一下?谢了。

///////////////////////////////////////////////////////////////////
现把程序改为:
#include <iostream>
#include <string>
using namespace std;
const int size = 350;
int main()
{
    char A[size];
    for(int i = 0; i < size; i++)
    {
        A[i] = 's';
    }
    cout << strlen(A) << endl;
    cout << sizeof(A) << endl;
         return 0;
}
我的电脑上输出结果是355    350
然后我再把char A[350];改为char A[200];输出结果变为203   200
strlen()和sizeof()应该只差一个\0的长度吧?  所以我还是没弄明白。

[[it] 本帖最后由 crazycoder 于 2008-11-26 21:10 编辑 [/it]]
8 回复
#2
lonmaor2008-11-26 15:05
我认为:
未初始化的字符数组,得到的字符串长度无意义。
#3
pascale2008-11-26 15:29
我这里输出0
#4
WorldOfGoo2008-11-26 16:38
得到的是一个garbage,未初始化数组
#5
crazycoder2008-11-26 16:58
现把程序改为:
#include <iostream>
#include <string>
using namespace std;
const int size = 350;
int main()
{
    char A[size];
    for(int i = 0; i < size; i++)
    {
        A[i] = 's';
    }
    cout << strlen(A) << endl;
    cout << sizeof(A) << endl;
         return 0;
}

我的电脑上输出结果是355    350
然后我再把char A[350];改为char A[200];输出结果变为203   200
strlen()和sizeof()应该只差一个\0的长度吧?  所以我还是没弄明白。

[[it] 本帖最后由 crazycoder 于 2008-11-26 21:11 编辑 [/it]]
#6
WorldOfGoo2008-11-26 17:14
10
350
请按任意键继续. . .
这个是输出呀。。。没错呀
strlen(A)表示字符串长度,sizeof(A)就是数组大小
#7
h130773959592008-11-26 19:19
strlen()计算字符长度,一直到字符为'\0'之前;sizeof()计算内存的大小;
    char A[350];  // 内存大小为350
    for(int i = 0; i < 10; i++)
    {
        A[i] = 's';
    }
   由于数组A中没有'\0',出现内存错误。
   注意c语言字符串与字符串数组的区别,strlen只针对前者
#8
newyj2008-11-26 19:52
在 未初始化的数组中 的元素是无意义的 而 strlen()是靠 '\0' 来判断 字符串的长短
这就要看 这个数组中 在什么位置 正好有个 '\0' 了
#9
crazycoder2008-11-26 21:18
多谢8楼,现在把程序改成这样:
#include <iostream>
#include <string>
using namespace std;
const int size = 200;
int main()
{
    char A[size+1];
    for(int i = 0; i < size; i++)
    {
        A[i] = 's';
    }
    A[size] = '\0';
    cout << strlen(A) << endl;
    cout << sizeof(A) << endl;
         return 0;
}
输出就跟预期一样了,为200   201
1