Board logo

标题: 请问,怎么建立字符a开头的10亿个char变量啊? [打印本页]

作者: zzz19760225    时间: 2024-10-8 20:12     标题: 请问,怎么建立字符a开头的10亿个char变量啊?

没有成功
  1. #include <stdio.h>
  2. int main() {
  3.     for(int b = 0; b < 1000000000; b=b+1) {
  4.         char ab = 'c';  // 初始化为'c'
  5.     }
  6. printf("%c\n",a123);
  7.     return 0;
  8. }
复制代码

作者: Five66    时间: 2024-10-8 21:14

1,使用代码生成,也就是用其他语言来生成包含对应变量的C代码,但是这不现实,就算1行包含1万个变量,也要1千万行,源文件非常非常大,而且这么多变量,程序栈早就撑爆了

2,申请一个包含10亿个char的内存空间,每个空间对应1个变量,但是10亿个char需要好多好多(9个多G)的内存(ram),而且不一定能成功
作者: zzz19760225    时间: 2024-10-9 07:46

本帖最后由 zzz19760225 于 2024-10-9 07:58 编辑

我以为一个char变量是1字节,10亿约1GB的呢
搜索的内容显示的是数组模式,就看看能不能将一个一个定义字符的char变量,做成批量生产散定义顺序号的。
原来不是想的那么可批量啊
通义千问2.5给的答案也是数组的。我是希望那种单个自由度的变量单元,散装的。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <windows.h>
  5. #include <string.h>
  6. //#include <graphics.h>
  7. //#include <easyx.h>
  8. int main() {
  9.     // 动态分配1亿个char的空间
  10.     char *data = (char *)malloc(1000000000 * sizeof(char));
  11.     if (data == NULL) {
  12.         fprintf(stderr, "Memory allocation failed\n");
  13.         return 1;
  14.     }
  15.     // 初始化数组(可选)
  16.     for (size_t i = 0; i < 1000000000; ++i) {
  17.         data[i] = 'A'; // 或者任何其他初始化值
  18.     }
  19.     // 你的代码...
  20. data[456]='c';
  21.     printf("%c\n",data[123]);
  22.     printf("%c\n",data[456]);
  23.     // 当不再需要这些数据时,释放内存
  24.     free(data);
  25.     return 0;
  26. }
复制代码

作者: Five66    时间: 2024-10-9 15:03

咦,确实10亿约1GB的呢,算多了一位

序号那种定义是脚本语言的功能,本质上也是动态分配的,C又不是脚本语言,想用就自己嵌入一个脚本引擎(
自己设计或者用现成的,例如lua,ruby,python之类的)
作者: jyswjjgdwtdtj    时间: 2024-10-9 22:05

本帖最后由 jyswjjgdwtdtj 于 2024-10-9 22:10 编辑

回复 1# zzz19760225


   int可以到十亿吗?我记得c++的int是两个字节
没太明白你的需求呢 生成一个巨长的char数组有什么意义呢?
作者: zzz19760225    时间: 2024-10-10 07:21

本帖最后由 zzz19760225 于 2024-10-10 09:02 编辑
回复  zzz19760225


   int可以到十亿吗?我记得c++的int是两个字节
没太明白你的需求呢 生成一个巨长 ...
jyswjjgdwtdtj 发表于 2024-10-9 22:05


想模拟DOS的储存点阵和显存点阵,通用于计算机规律的标准变量。一个变量代表一个储存阵列的单元
在变量为单元基础上考虑通用点阵字符集阵列(以代码编码为内容的字符集,其必然有编码对应的容器图形规律习惯,形的集合集中,就最后都归并到点阵为相近的无限里有限大小字体,就如以人命的科学规律,归并在通用的结构功能点阵队伍里)和其他相关内容。
DOS是64KB,1MB,1GB的范围,所以想选择1GB做一个初步尝试。(以前想用文本,一个文本一个二进制,后来发觉不行,好像太大了。其实倒是可以考虑文本为一个字节,但是实际操作应该没有内存耐用,写内存与写硬盘的损耗)
(通过自由度的基本单元,去企图尝试广义的汉字DOS可能。人人可以操作的过程,相对不受技术行业公私企业封闭影响的自由度的玩具汉字DOS)
(你以前有发过的API,也尝试了,要是能成为一个信息机器处理信息,会不会不需要编程编译软件,但是不会用,我机器上做不出dll文件。后来综合起来,不会VBS,VB,又需要界面,需要相对比较好的信息处理,就得用c编程软件)
作者: zzz19760225    时间: 2024-10-11 10:04

本帖最后由 zzz19760225 于 2024-10-11 12:00 编辑

用多维数组,9个10叠加10亿?
但是并不能显示
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <windows.h>
  5. #include <string.h>
  6. //#include <graphics.h>
  7. //#include <easyx.h>
  8. int main() {
  9. char a[10][10][10][10][10][10][10][10][10]={'n','n','n','n','n','n','n','n','n','n'};
  10.     printf("%c\n",a[1]);
  11.     return 0;
  12. }
复制代码

通义千问2.5的解答,输出还是不行。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <windows.h>
  5. #include <string.h>
  6. //#include <graphics.h>
  7. //#include <easyx.h>
  8. int main() {
  9.     // 声明一个多维数组
  10.     char a[10][10][10][10][10][10][10][10][10];
  11.     // 初始化数组(可选)
  12.     for (size_t i0 = 0; i0 < 10; ++i0) {
  13.         for (size_t i1 = 0; i1 < 10; ++i1) {
  14.             for (size_t i2 = 0; i2 < 10; ++i2) {
  15.                 for (size_t i3 = 0; i3 < 10; ++i3) {
  16.                     for (size_t i4 = 0; i4 < 10; ++i4) {
  17.                         for (size_t i5 = 0; i5 < 10; ++i5) {
  18.                             for (size_t i6 = 0; i6 < 10; ++i6) {
  19.                                 for (size_t i7 = 0; i7 < 10; ++i7) {
  20.                                     for (size_t i8 = 0; i8 < 10; ++i8) {
  21.                                         a[i0][i1][i2][i3][i4][i5][i6][i7][i8] = 'A'; // 或者任何其他初始化值
  22.                                     }
  23.                                 }
  24.                             }
  25.                         }
  26.                     }
  27.                 }
  28.             }
  29.         }
  30.     }
  31.     // 你的代码...
  32.     printf("%c\n",a[0][1][2][3][4][5][6][7][8]);
  33.     return 0;
  34. }
复制代码

作者: Five66    时间: 2024-10-11 18:46

回复 5# jyswjjgdwtdtj


    16位编译器的int才是2字节,一般对应16位系统
作者: Five66    时间: 2024-10-11 18:51

回复 7# zzz19760225


    main中的变量默认是自动变量(局部变量),储存在栈上,栈空间大小是有限的(只有几m),10亿个char这么大的数组肯定不行
作者: zzz19760225    时间: 2024-10-11 21:00

本帖最后由 zzz19760225 于 2024-10-18 12:10 编辑
  1. 百度“C语言WIN栈空间为1GB”:
  2. “在C语言中,默认的WIN系统栈空间通常不会有1GB这么大,通常是几兆字节。在Windows系统中,默认的线程栈大小是1MB。如果你想要设置更大的栈空间,可以在创建线程时指定。
  3. 以下是一个创建线程并指定栈大小的例子:”
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <conio.h>
  7. #include <windows.h>
  8. #include <string.h>
  9. //#include <graphics.h>
  10. //#include <easyx.h>
  11. DWORD WINAPI ThreadProc(LPVOID lpParam){  /*[1]线程工作代码*/return 0;  }
  12. int main()
  13. {
  14.     HANDLE hThread;
  15.     CONST SIZE_T stackSize = 1024 * 1024 * 1024 ; //原本1024*1024*100
  16.     hThread = CreateThread(
  17.         NULL,           // default security attributes
  18.         stackSize,      // use a 1000MB stack size
  19.         ThreadProc,     // thread function name
  20.         NULL,           // argument to thread function
  21.         0,              // use default creation flags
  22.         NULL);          // returns the thread identifier
  23.     // Check the return value for success.
  24.     // ...
  25.     return 0;
  26. }
复制代码
静态数组
  1. char a[1000000000];
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2