此短小程序求助,为何VC环境运行出错,而WINTC却完全正常?(ps:二者编译都没有错)程序如下:

#include<stdio.h>#defineSIZE3intmain(){inti;char*name[SIZE];printf("Inputthecontent:\... #include <stdio.h>
#define SIZE 3
int main(){
int i;
char *name[SIZE];
printf("Input the content:\n");
for(i=0;i<SIZE;i++)
gets(name[i]);
printf("Your strings are:\n");
for(i=0;i<SIZE;i++)
puts(name[i]);
return 0;
}

以前印象中总有关于数组指针类的东西,VC总在运行时出错,而WinTC则能正常运行,这到底是怎么回事?二者到底有什么区别,求大牛解答、、、
展开
 我来答
noodlest
2013-01-31 · TA获得超过785个赞
知道小有建树答主
回答量:724
采纳率:100%
帮助的人:717万
展开全部

1、使用指针数组的话需要动态管理里内存,比如new、delete等。

使用数组可以简单管理(只是预设了较多的空间):

#include <stdio.h>

#define SIZE 3

#define LENGTH 20


int main()

{

    int i;

    char name[SIZE][LENGTH];

    printf("Input the content:\n");

    for(i=0;i<SIZE;i++)

        gets(name[i]);

    printf("Your strings are:\n");

    for(i=0;i<SIZE;i++)

        puts(name[i]);

    return 0;

}

2、可能是TC和VC对未分配指针使用不同的地址初始值。

TC的紧跟着代码数据段使用,VC的向上迁移了许多,导致访问了不能不访问的地址空间(系统空间),就出错了:

具体也解释不了,期待高手答案吧。

追问
嗯,昨天在贴吧里有高手说用malloc函数,因为这是C嘛,new神马的是C++的吧...不过你说的第二点挺好的,也许是这个问题吧,呵呵。
追答

看来还得多深入了解系统内存布局,16位的8086系统内存布局资料比较多,什么位置系统用、什么位置应用程序用,这方面的资料接触的还多一些:

32位的内存布局就接触的少了些,要是能推荐一些这方面的书籍就好了。

浪花飘零2000
2013-01-31 · TA获得超过630个赞
知道小有建树答主
回答量:579
采纳率:0%
帮助的人:536万
展开全部
问题应该出在char *name[SIZE];行上,这行定义了多个指针,这些指针可以分别指向不同的内存空间,但是却没有分配空间,对于VC,这些指针初始化时可能指向一个随机的内存空间,这些空间若是系统保留空间,就会导致VC会在运行时报错。
按照原程序,可改写程序如下:
#include <stdio.h>
#define SIZE 3
int main(){
int i;
char name[SIZE];
printf("Input the content:\n");
for(i=0;i<SIZE;i++)
gets(&name[i]);
printf("Your strings are:\n");
for(i=0;i<SIZE;i++)
puts(name[i]);
return 0;
}
追问
嗯,你说的对,但是你的程序实现的则不是字符串数组,而是字符数组了....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式