此短小程序求助,为何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则能正常运行,这到底是怎么回事?二者到底有什么区别,求大牛解答、、、 展开
#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则能正常运行,这到底是怎么回事?二者到底有什么区别,求大牛解答、、、 展开
2个回答
展开全部
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++的吧...不过你说的第二点挺好的,也许是这个问题吧,呵呵。
展开全部
问题应该出在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;
}
按照原程序,可改写程序如下:
#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;
}
追问
嗯,你说的对,但是你的程序实现的则不是字符串数组,而是字符数组了....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询