主题:[讨论]在线等一个关于char的字符数组的问题。我很费解呀。标题要长要醒目
全频阻塞干扰
[专家分:0] 发布于 2011-04-01 18:07:00
#include "stdafx.h"
#include "string.h"
#define TEXTLEN 10000
int main(void)
{
char text[TEXTLEN+1];
printf("strlen(text)=%d\n\n\n\n",strlen(text));
return 0;
}
我还没有往里面写数据呢,结果应该是0,为什么结果是10007
在线急等。[em16]
回复列表 (共9个回复)
沙发
fragileeye [专家分:1990] 发布于 2011-04-01 23:03:00
这么等还不如百度、
strlen从首地址的字符开始索引,到第一个'\0'结束。没初始化就这么用?
板凳
全频阻塞干扰 [专家分:0] 发布于 2011-04-01 23:30:00
[quote]这么等还不如百度、
strlen从首地址的字符开始索引,到第一个'\0'结束。没初始化就这么用?[/quote]
我是看的Ivor Horton的《Beginning C From Novice To Professional》书得,因为听人介绍说这本书比较好,所以用这本书入门。上面的一个程序就是这样用的。
现在这个在VC里肯定不正确,我想问下为什么结果会是10007?
3 楼
fragileeye [专家分:1990] 发布于 2011-04-02 09:34:00
这个结果肯定是未知的,在C-Free中的结果是0.
4 楼
linruicsu [专家分:20] 发布于 2011-04-02 21:12:00
楼主对text没有初始化,显示的肯定不对了,
在就是没有必要给主函数弄返回值没用
#include<stdio.h>
#include "string.h"
#define TEXTLEN 10000
int main(void)
{
char text[TEXTLEN+1]="I am a student";
printf("strlen(text)=%d\n\n\n\n",strlen(text));
return 0;
}
5 楼
diycai [专家分:1590] 发布于 2011-04-03 02:13:00
其实例子是对的,而你的结果之所以出错是因为
你没有用Release模式编译运行程序。
6 楼
cgl_lgs [专家分:21040] 发布于 2011-04-03 09:52:00
一般情況下,編譯器為了效率,棧數據是不會自動初始化的。
所以局部變量一定要自行負責初始化操作!
你的程序不崩潰已經是很給你面子了。
7 楼
全频阻塞干扰 [专家分:0] 发布于 2011-04-06 22:48:00
[quote]
楼主对text没有初始化,显示的肯定不对了,
在就是没有必要给主函数弄返回值没用
#include<stdio.h>
#include "string.h"
#define TEXTLEN 10000
int main(void)
{
char text[TEXTLEN+1]="I am a student";
printf("strlen(text)=%d\n\n\n\n",strlen(text));
return 0;
}
[/quote]
饿,我用的VC,选了helloworld模式
一出来就有这个返回值
8 楼
全频阻塞干扰 [专家分:0] 发布于 2011-04-06 22:49:00
[quote]其实例子是对的,而你的结果之所以出错是因为
你没有用Release模式编译运行程序。[/quote]
请问怎么用
Release模式编译运行程序
9 楼
SonicLing [专家分:6260] 发布于 2011-04-06 23:16:00
找到显示有“Debug”的地方,把它换成“Release”。
我来回复