专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C++

请问char buf[100]的100能不能用变量替换

发布时间:2011-06-28 14:26:20 文章来源:www.iduyao.cn 采编人员:星星草
请教char buf[100]的100能不能用变量替换?
请教,对于下面的定义,buf的大小能不用用变量替代?
比如先获取一个文件的字节数,然后用这个文件的字节数替换10000000
char  buf[10000000];

------解决方案--------------------
不能,不过你可以用指针,malloc, 用完free就可以啊。
------解决方案--------------------
不可以。 可以使用std::vector<char> 或std::array<char>


unsigned int size; 
...
std::vector<char> buf(size);
char* pbuf = &buf[0];

------解决方案--------------------
C99可以 
C11可能可以
C++完全不行
------解决方案--------------------
char  buf[10000000]  编译器已经开始分配内存 ,如果你用变量 编译器不能识别,动态分配 还是用指针malloc
------解决方案--------------------
如果是静态数组的话,数组的大小必须定义时就确定,不然编译会出问题,一般用用个计数器算出文件中包括的字节数,然后用malloc(C中的)或者new(C++)中进行程序的动态开辟,就可以了,
------解决方案--------------------
可以动态分配 new[SIZE] 或者 malloc(SIZE)
------解决方案--------------------
首先,
char a[1000000000];
这个 a 在栈里,应用程序的默认栈是很小的,很有可能编译通过,运行也挂了。而且,不建议在栈里放如此大的东西。

其次,在最新的C++11标准里,是支持 
char a[var]; 
的,在GCC 4.8下

int pp = 100;
char ddd[pp];
pp++;
char ttt[pp];
for (int i = 0;i<100;i++) ddd[i] = i;
for (int i = 0;i<101;i++) ttt[i] = i;

是可以的,要打开-std=c++11选项

再次,动态分配是最好的解决方案。建议动态分配!
如果怕管理生存期,建议翻翻 shared_ptr的文档。
------解决方案--------------------
说能用变量替换的人试试将变量的值设为2147483648
------解决方案--------------------
仅供参考
//输出PROG中有但LIST中没有的文本行,即集合PROG-LIST
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <search.h>
#define MAXCHARS 512
int MAXLINES=10000,MAXLINES2;
char *buf,*buf2;
char PROG[256]="PROG";//程序Program需要的文件列表
char LIST[256]="LIST";//dir /b /s生成的实际文件列表List
FILE *fp,*fl;
int i,c,n,L,hh;
int ignore_case=0;
char ln[MAXCHARS];
int icompare(const void *arg1,const void *arg2) {
   return stricmp((char *)arg1,(char *)arg2);
}
int compare(const void *arg1,const void *arg2) {
   return strcmp((char *)arg1,(char *)arg2);
}
int main(int argc,char **argv) {
    if (argc>1) strcpy(PROG,argv[1]);//命令行参数1覆盖PROG
    if (argc>2) strcpy(LIST,argv[2]);//命令行参数2覆盖LIST
    if (argc>3) ignore_case=1;//若存在命令行参数3,忽略大小写
    if ((fl=fopen(LIST,"rt"))==NULL) {
        fprintf(stderr,"Can not open %sn",LIST);
        fprintf(stderr,"Usage: %s [PROG] [LIST] [-i]n",argv[0]);
        return 1;
    }
    if ((fp=fopen(PROG,"rt"))==NULL) {
        fclose(fl);
        fprintf(stderr,"Can not open %sn",PROG);
        fprintf(stderr,"Usage: %s [PROG] [LIST] [-i]n",argv[0]);
        return 2;
    }
    buf=(char *)malloc(MAXLINES*MAXCHARS);
    if (NULL==buf) {
        fclose(fl);
        fclose(fp);
        fprintf(stderr,"Can not malloc(%d LINES*%d CHARS)!n",MAXLINES,MAXCHARS);
        return 4;
    }
    n=0;
    hh=0;
    i=0;
    while (1) {
        if (fgets(ln,MAXCHARS,fl)==NULL) break;//
        hh++;
        L=strlen(ln)-1;
        if ('n'!=ln[L]) {//超长行忽略后面内容
            fprintf(stderr,"%s Line %d too long(>%d),spilth ignored.n",LIST,hh,MAXCHARS);
            while (1) {
                c=fgetc(fl);
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: