免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10603 | 回复: 10
打印 上一主题 下一主题

_MAX_PATH 错误 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-14 06:36 |只看该作者 |倒序浏览
char cwdBuffer[_MAX_PATH];  // 出现这行错误

pass1.c: In function 'main':
pass1.c:18: error: '_MAX_PATH' undeclared (first use in this function)
pass1.c:18: error: (Each undeclared identifier is reported only once
pass1.c:18: error: for each function it appears in.)


我有 #include<stdlib.h>  _MAX_PATH 不是宣告在 stdlib.h 头文件中为何还会出现上面错误讯息?

谢谢






  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>


  4. int main(int argc,char *argv[]){
  5.         FILE *fSource,*fIntermediate,*fSymTable;
  6.         unsigned int sic_length=0;
  7.         char name[1][128];
  8.         char pathIntermediate[256],pathSymbolTable[256];
  9.         char cwdBuffer[_MAX_PATH];
  10.         printf("(2005.Dec.10) sic1.c Released!!\n");
  11.         printf("(2007.May.10) sic1.c Fixed!!\n");
  12.         printf("Author's Website: http://tw.myblog.yahoo.com/mjshya/\n\n");
  13.         if(argc!=2){
  14.                 printf("Input SIC source file name: ");
  15.                 scanf("%s",&name[0]);
  16.                 argv[1]=name[0];
  17.         }
  18.         fSource=fopen(argv[1],"r");
  19.         if(fSource==NULL){
  20.                 printf("Open Source File Failure!!\n");
  21.                 printf("Check Files Please!!\n");
  22.                 system("pause");
  23.                 exit(0);
  24.         }
  25.         getcwd(cwdBuffer,_MAX_PATH);
  26.         strcpy(pathIntermediate,cwdBuffer);
  27.         strcat(pathIntermediate,"\\intermed\\interMed.txt");
  28.         strcpy(pathSymbolTable,cwdBuffer);
  29.         strcat(pathSymbolTable,"\\intermed\\symTable.txt");
  30.         mkdir("intermed");
  31.         fIntermediate=fopen(pathIntermediate,"w");
  32.         fSymTable=fopen(pathSymbolTable,"w");
  33.         if(fSource!=NULL||fIntermediate!=NULL||fSymTable!=NULL){
  34.                 if((sic_length=funPassFirst(fSource,fIntermediate,fSymTable))!=-1){
  35.                         fclose(fSource);
  36.                         fclose(fSymTable);
  37.                         fclose(fIntermediate);
  38.                         printf("...Address Completed!!\n");
  39.                 }else{
  40.                         fclose(fSource);
  41.                         fclose(fIntermediate);
  42.                         fclose(fSymTable);
  43.                         system("pause");
  44.                         exit(0);
  45.                 }
  46.         }else{
  47.                 printf("Open Source, Destination and Symbol_Table Files Failure!!\n");
  48.                 printf("Check Files Please!!\n");
  49.                 system("pause");
  50.         }
  51.         return 0;
  52. }
复制代码



gcc -c test.c -o test.o          // 上面是我的代碼我是編譯成test.o錯誤

[ 本帖最后由 shihyu 于 2007-5-14 06:45 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-05-14 08:47 |只看该作者
_MAX_PATH没有声明,应该是PATH_MAX宏吧?在limits.中

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
3 [报告]
发表于 2007-05-14 11:34 |只看该作者
我刚刚试过加入 #include <limits.h>  还是不可以

论坛徽章:
0
4 [报告]
发表于 2007-05-14 11:56 |只看该作者

回复 3楼 shihyu 的帖子

gcc -std=c99 test.c -o test

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2007-05-14 12:24 |只看该作者
原帖由 shihyu 于 2007-5-14 11:34 发表
我刚刚试过加入 #include <limits.h>  还是不可以

你把 _MAX_PATH 改成 PATH_MAX 了么?

论坛徽章:
0
6 [报告]
发表于 2007-05-14 12:38 |只看该作者
原帖由 scutan 于 2007-5-14 11:56 发表
gcc -std=c99 test.c -o test


弄错了, 这儿不应该加-std=c99.
楼主应该是参数写错了

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
7 [报告]
发表于 2007-05-14 16:36 |只看该作者
把 _MAX_PATH 改成 PATH_MAX  改了之后还是不可以 =.=

论坛徽章:
0
8 [报告]
发表于 2007-05-14 17:53 |只看该作者
我这边改了是可以的


  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<limits.h>

  5. int main(int argc,char *argv[]){
  6.         FILE *fSource,*fIntermediate,*fSymTable;
  7.         unsigned int sic_length=0;
  8.         char name[1][128];
  9.         char pathIntermediate[256],pathSymbolTable[256];
  10.         char cwdBuffer[PATH_MAX];
  11.         printf("(2005.Dec.10) sic1.c Released!!\n");
  12.         printf("(2007.May.10) sic1.c Fixed!!\n");
  13.         printf("Author's Website: http://tw.myblog.yahoo.com/mjshya/\n\n");
  14.         if(argc!=2){
  15.                 printf("Input SIC source file name: ");
  16.                 scanf("%s",&name[0]);
  17.                 argv[1]=name[0];
  18.         }
  19.         fSource=fopen(argv[1],"r");
  20.         if(fSource==NULL){
  21.                 printf("Open Source File Failure!!\n");
  22.                 printf("Check Files Please!!\n");
  23.                 system("pause");
  24.                 exit(0);
  25.         }
  26.         getcwd(cwdBuffer,PATH_MAX);
  27.         strcpy(pathIntermediate,cwdBuffer);
  28.         strcat(pathIntermediate,"\\intermed\\interMed.txt");
  29.         strcpy(pathSymbolTable,cwdBuffer);
  30.         strcat(pathSymbolTable,"\\intermed\\symTable.txt");
  31.         mkdir("intermed");
  32.         fIntermediate=fopen(pathIntermediate,"w");
  33.         fSymTable=fopen(pathSymbolTable,"w");
  34.         if(fSource!=NULL||fIntermediate!=NULL||fSymTable!=NULL){
  35.                 if((sic_length=funPassFirst(fSource,fIntermediate,fSymTable))!=-1){
  36.                         fclose(fSource);
  37.                         fclose(fSymTable);
  38.                         fclose(fIntermediate);
  39.                         printf("...Address Completed!!\n");
  40.                 }else{
  41.                         fclose(fSource);
  42.                         fclose(fIntermediate);
  43.                         fclose(fSymTable);
  44.                         system("pause");
  45.                         exit(0);
  46.                 }
  47.         }else{
  48.                 printf("Open Source, Destination and Symbol_Table Files Failure!!\n");
  49.                 printf("Check Files Please!!\n");
  50.                 system("pause");
  51.         }
  52.         return 0;
  53. }
复制代码


不过奇怪的是在limits.h中没看到定义



  1. $ grep PATH_MAX /usr/include/*.h
  2. /usr/include/stdlib.h:   name is PATH_MAX chars or more, returns null with `errno' set to
  3. /usr/include/stdlib.h:   ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars, returns the
  4. /usr/include/unistd.h:   BUF and return NULL.  BUF should be at least PATH_MAX bytes long.  */
  5. $
复制代码

论坛徽章:
0
9 [报告]
发表于 2007-05-14 17:59 |只看该作者
自己写了一个c 和 c++的测试了一下,#include <limits.h>是正确的
c 的代码

  1. #include <stdio.h>
  2. #include <limits.h>

  3. int main(int argc, char* argv[])
  4. {
  5.    printf("Max path is %d\n", PATH_MAX);
  6.    printf("File max is %d\n", NAME_MAX);
  7.    return 0;
  8. }
复制代码


c++的代码

  1. #include <iostream>
  2. #include <climits>

  3. using namespace std;

  4. int main(int argc, char* argv[])
  5. {
  6.    cout << "Max path is " << PATH_MAX << endl;
  7.    cout << "File max is " << NAME_MAX << endl;
  8.    return 0;
  9. }
复制代码


执行结果

  1. Max path is 4096
  2. File max is 255
复制代码

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
10 [报告]
发表于 2007-05-14 18:01 |只看该作者
原帖由 shihyu 于 2007-5-14 16:36 发表
把 _MAX_PATH 改成 PATH_MAX  改了之后还是不可以 =.=

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP