文件读取和输入的小问题,指针数组的初始化

qq_30446977 2015-09-21 02:07:49
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<string.h>

#define LENGTH 81
int mai (void)
{
char *yanyu[]=
{
"san ren cheng hu.\n",
"xin xiang shi cheng.\n",
"ke zhou qiu jian.\n"};

char more[LENGTH];
FILE *pfile=NULL;
char* filename="yan yu ji ze";

pfile=fopen(filename,"w");
if(!pfile)
{
printf("\n da kai wen jian chu cuo!");
exit(1);
}

setvbuf(pfile,NULL,_IOFBF,LENGTH);

for(int i=0;i<sizeof(yanyu)/sizeof(yanyu[0]);++i)
if(EOF==fputs(yanyu[i],pfile))
{
printf("du ru shi bai!");
exit(1);
}

fclose(pfile);
pfile=NULL;

pfile=fopen(filename,"a");
if(!pfile)
{
printf("zeng jia wen jian neirong chucuo!");
exit(1);
}
setvbuf(pfile,NULL,_IOFBF,LENGTH);

while(1)
{
fgets(more,LENGTH,stdin);
if(more[0]=='\n')
break;

if(EOF==(fputs(more,pfile)))
{
printf("\n zeng jia wenjian neirong shibai.");
exit(1);
}

}

fclose(pfile);
pfile=NULL;

pfile=fopen(filename,"r");
if(!pfile)
{
printf("da kai wen jian shibai!");
exit(1);
}

setvbuf(pfile,NULL,_IOFBF,LENGTH);

printf("zhe xie yan yu shi:\n");
while(fgets(more,LENGTH,pfile))
printf("%s",more);

fclose(pfile);

remove(filename);
pfile=NULL;
return 0;
}
刚学到从文件读写字符串。但是遇到个的问题。
指针数组的初始化
char *yanyu[]=
{
"san ren cheng hu.\n",
"xin xiang shi cheng.\n",
"ke zhou qiu jian.\n"};
编译不过去。但是我删掉 char more[LENGTH];就能编译通过是为什么呢。
我在网上找了好多资料,别人这样初始化都是可以的啊!下面就是我找到的一个例子。为什么我的一加char more[LENGTH];就编译不过去呢。
char *month_name(int n)
{
static char *name[]={
"Illegal month",
"January","February","March",
"April","May","June",
"July","August","September",
"October","November","December"
};
return (n<1||n>12)?name[0]:name[n];
}
其中,name的声明与排序例子中lineptr的声明相同,是一个一维数组,数组的元素为字符指针。name数组的初始化通过一个字符串列表实现,列表中的每个字符串赋值给数组相应位置的元素。第i个字符串的所有字符存储在存储器中的某个位置,指向它的指针存储在name[i]中。由于上述声明中没有指明数组name的长度,因此,编译器编译时将对初值个数进行统计,并将这一准确数字填入数组的长度。
...全文
60 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我用 gcc 可以编译过去,没问题
赵4老师 2015-09-21
  • 打赏
  • 举报
回复
int mai (void)→int main(void) 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。 关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧