user-0 提问: c字符累加输出，是这么描述么。。。

回复:
user: user-1
content: #include <stdio.h> #define MAXWIDTH 10 #define MAXNUM 19 #define MAXNUMLEN 2 char *bulidStr(int slen) {     static char nowtext[(MAXWIDTH+1)*(MAXNUM+2-1)+1];     int i,w;     w=1;for (i=0;i<slen;i++) w*=10;     if (slen<1     ) slen=1;     if (slen>MAXWIDTH) slen=MAXWIDTH;     for (i=1;i<MAXNUM+2;i++) {         sprintf(nowtext+(slen+1)*(i-1),"%0*d ",slen,i%(MAXNUM+1)%w);     }     return nowtext; } int main() {     for (int bit=1;bit<MAXWIDTH+2;bit++) {         printf("%d:%s\n",bit,bulidStr(bit));     }     return 0; } //1:1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 //2:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 00 //3:001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 000 //4:0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0000 //5:00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00000 //6:000001 000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000000 //7:0000001 0000002 0000003 0000004 0000005 0000006 0000007 0000008 0000009 0000010 0000011 0000012 0000013 0000014 0000015 0000016 0000017 0000018 0000019 0000000 //8:00000001 00000002 00000003 00000004 00000005 00000006 00000007 00000008 00000009 00000010 00000011 00000012 00000013 00000014 00000015 00000016 00000017 00000018 00000019 00000000 //9:000000001 000000002 000000003 000000004 000000005 000000006 000000007 000000008 000000009 000000010 000000011 000000012 000000013 000000014 000000015 000000016 000000017 000000018 000000019 000000000 //10:0000000001 0000000002 0000000003 0000000004 0000000005 0000000006 0000000007 0000000008 0000000009 0000000010 0000000011 0000000012 0000000013 0000000014 0000000015 0000000016 0000000017 0000000018 0000000019 0000000000 //11:0000000001 0000000002 0000000003 0000000004 0000000005 0000000006 0000000007 0000000008 0000000009 0000000010 0000000011 0000000012 0000000013 0000000014 0000000015 0000000016 0000000017 0000000018 0000000019 0000000000 //

user: user-0
content: 引用 25 楼 animalong 的回复:[quote=引用 24 楼 user-2 的回复:] [quote=引用 23 楼 animalong 的回复:] [quote=引用 16 楼 user-2 的回复:] %s需要以\0结尾的字符串，它会一直输出到找到\0为止  这样吧：printf("%.*s", 长度, nowtext);  对了，我突然觉得 动态分配的时候，输出出现的多余字符是不是可以通过先进行一次初始化操作来清除掉。  又觉得不对。出现这个情况好像是malloc给多分配了数量一样 [/quote]  先把缓冲区全部填0[/quote]  终于找到一个办法： [/quote]  但这个方法似乎只适合在我这个程序里用，而且必需让每个位置都存入英文字符，才能把它们全显示出来，不然就会在输出的时候变成乱码，/0也不能随便放，否则会报错

user: user-0
content: 引用 24 楼 user-2 的回复:[quote=引用 23 楼 animalong 的回复:] [quote=引用 16 楼 user-2 的回复:] %s需要以\0结尾的字符串，它会一直输出到找到\0为止  这样吧：printf("%.*s", 长度, nowtext);  对了，我突然觉得 动态分配的时候，输出出现的多余字符是不是可以通过先进行一次初始化操作来清除掉。  又觉得不对。出现这个情况好像是malloc给多分配了数量一样 [/quote]  先把缓冲区全部填0[/quote]  终于找到一个办法：  int bit = 5; char *nowtext;  nowtext = (char*)malloc(sizeof(char) * (bit+ 1));  // 动态开辟一片内存(开辟bit个char,返回void*,所以强转成char*)，需要多申请一位放'\0'；c++用new char[bit] nowtext[bit] = '\0'; // malloc开辟的内存空间似乎没有给结束标记，因此要多申请一位，并在最后一位上放'\0'  //......  free(nowtext); // 释放malloc开辟的内存；c++用delete[] nowtext; nowtext = NULL; // 虽然释放了，但内存地址还存在这里，为避免误操作，给它置NULL。free完之后，一定要给指针置NULL！

user: user-0
content: bit = 2; // 指定要输出多少位字符 	nowtext = (char*)malloc(sizeof(char) * bit);  // 动态开辟一片内存 	bulidStr(bit); 	free(nowtext); // 释放   (char*)malloc(sizeof(char) * bit);   我找到了这个，但它输出的时候多了点东西

user: user-2
content: nowtext = (char*)malloc(sizeof(char)*数量);

user: user-2
content: 我知道了，你这个是C语言，不是C++，应该用malloc

user: user-0
content: 引用 10 楼 animalong 的回复:[quote=引用 9 楼 user-2 的回复:] [quote=引用 8 楼 animalong 的回复:] [quote=引用 6 楼 user-2 的回复:] [quote=引用 5 楼 animalong 的回复:] [quote=引用 2 楼 user-2 的回复:] 有没有为nowtext分配内存 nowtext = new char[bit] 这样吗？ 我这new 和 char下都标红了....[/quote]  可以动态分配，你也可以把nowtext定义成字符数组：  char nowtext[100];[/quote] 直接指定一个大的就可以了吗？  nowtext是全局的，是不是不能动态指定大小了？[/quote]  那就要用动态分配，你5楼的方法可以，不过把那条语句要写在函数里[/quote]  可是它报错了 T T[/quote]  引用 10 楼 animalong 的回复:[quote=引用 9 楼 user-2 的回复:] [quote=引用 8 楼 animalong 的回复:] [quote=引用 6 楼 user-2 的回复:] [quote=引用 5 楼 animalong 的回复:] [quote=引用 2 楼 user-2 的回复:] 有没有为nowtext分配内存 nowtext = new char[bit] 这样吗？ 我这new 和 char下都标红了....[/quote]  可以动态分配，你也可以把nowtext定义成字符数组：  char nowtext[100];[/quote] 直接指定一个大的就可以了吗？  nowtext是全局的，是不是不能动态指定大小了？[/quote]  那就要用动态分配，你5楼的方法可以，不过把那条语句要写在函数里[/quote]  可是它报错了 T T[/quote]

user: user-0
content: 引用 9 楼 user-2 的回复:[quote=引用 8 楼 animalong 的回复:] [quote=引用 6 楼 user-2 的回复:] [quote=引用 5 楼 animalong 的回复:] [quote=引用 2 楼 user-2 的回复:] 有没有为nowtext分配内存 nowtext = new char[bit] 这样吗？ 我这new 和 char下都标红了....[/quote]  可以动态分配，你也可以把nowtext定义成字符数组：  char nowtext[100];[/quote] 直接指定一个大的就可以了吗？  nowtext是全局的，是不是不能动态指定大小了？[/quote]  那就要用动态分配，你5楼的方法可以，不过把那条语句要写在函数里[/quote]  可是它报错了 T T

user: user-2
content: 引用 8 楼 animalong 的回复:[quote=引用 6 楼 user-2 的回复:] [quote=引用 5 楼 animalong 的回复:] [quote=引用 2 楼 user-2 的回复:] 有没有为nowtext分配内存 nowtext = new char[bit] 这样吗？ 我这new 和 char下都标红了....[/quote]  可以动态分配，你也可以把nowtext定义成字符数组：  char nowtext[100];[/quote] 直接指定一个大的就可以了吗？  nowtext是全局的，是不是不能动态指定大小了？[/quote]  那就要用动态分配，你5楼的方法可以，不过把那条语句要写在函数里

user: user-0
content: 引用 6 楼 user-2 的回复:[quote=引用 5 楼 animalong 的回复:] [quote=引用 2 楼 user-2 的回复:] 有没有为nowtext分配内存 nowtext = new char[bit] 这样吗？ 我这new 和 char下都标红了....[/quote]  可以动态分配，你也可以把nowtext定义成字符数组：  char nowtext[100];[/quote] 直接指定一个大的就可以了吗？  nowtext是全局的，是不是不能动态指定大小了？

user: user-0
content: char * nowtext 改成 char nowtext[3]，是可以了，  但我怎么能在每次程序开始运行的时候指定 nowtext的长度，而不是一次写死在这里？

user: user-2
content: 引用 5 楼 animalong 的回复:[quote=引用 2 楼 user-2 的回复:] 有没有为nowtext分配内存 nowtext = new char[bit] 这样吗？ 我这new 和 char下都标红了....[/quote]  可以动态分配，你也可以把nowtext定义成字符数组：  char nowtext[100];

user: user-0
content: 引用 2 楼 user-2 的回复:有没有为nowtext分配内存 nowtext = new char[bit] 这样吗？ 我这new 和 char下都标红了....

user: user-0
content: 引用 2 楼 user-2 的回复:有没有为nowtext分配内存 呃，刚学，有这么个练习题想做做，怎么分配内存的

user: user-0
content: 给个别的写法也好

user: user-2
content: 有没有为nowtext分配内存

user: user-0
content: nowtext[bit - slen] = c; 我这句不能运行

user: user-2
content: 引用 23 楼 animalong 的回复:[quote=引用 16 楼 user-2 的回复:] %s需要以\0结尾的字符串，它会一直输出到找到\0为止  这样吧：printf("%.*s", 长度, nowtext);  对了，我突然觉得 动态分配的时候，输出出现的多余字符是不是可以通过先进行一次初始化操作来清除掉。  又觉得不对。出现这个情况好像是malloc给多分配了数量一样 [/quote]  先把缓冲区全部填0

user: user-0
content: 引用 16 楼 user-2 的回复:%s需要以\0结尾的字符串，它会一直输出到找到\0为止  这样吧：printf("%.*s", 长度, nowtext);  对了，我突然觉得 动态分配的时候，输出出现的多余字符是不是可以通过先进行一次初始化操作来清除掉。  又觉得不对。出现这个情况好像是malloc给多分配了数量一样

user: user-0
content: 引用 21 楼 zhao4zhong1 的回复:#include <stdio.h> #define MAXLEN 8 char *text = "0123456789"; #define text_len 10 char *bulidStr(int slen) {     static char nowtext[(MAXLEN+1)*text_len+1];     if (slen<1     ) slen=1;     if (slen>MAXLEN) slen=MAXLEN;     for (int i=0;i<text_len;i++) {         sprintf(nowtext+(slen+1)*i,"%0*c ",slen,text[i]);     }     return nowtext; } int main() {     for (int bit=1;bit<10;bit++) {         printf("%d:%s\n",bit,bulidStr(bit));     }     return 0; } //1:0 1 2 3 4 5 6 7 8 9 //2:00 01 02 03 04 05 06 07 08 09 //3:000 001 002 003 004 005 006 007 008 009 //4:0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 //5:00000 00001 00002 00003 00004 00005 00006 00007 00008 00009 //6:000000 000001 000002 000003 000004 000005 000006 000007 000008 000009 //7:0000000 0000001 0000002 0000003 0000004 0000005 0000006 0000007 0000008 0000009 //8:00000000 00000001 00000002 00000003 00000004 00000005 00000006 00000007 00000008 00000009 //9:00000000 00000001 00000002 00000003 00000004 00000005 00000006 00000007 00000008 00000009 //  抱歉已经结贴了，而且你这个只有最后一位变化啊，比如两位的话应该是： 01 02 03...      11 12 13....  21 22 23... 31 32 33...  ...........  99